取得してみましょう

設定したデータを取得していきたいと思います。


その前に、サブのテーブルのテストクラスを見てみると、今回は結合をしていますので、新しいメソッドが追加されています。


SCompanyを例にとってみましょう。


public class SCompanyService extends AbstractService {

/**
* 識別子とバージョン番号でエンティティを検索します。
*
* @param comId
* 識別子
* @param version
* バージョン番号
* @return エンティティ
*/
public SCompany findByIdVersion(Integer comId, Integer version) {
return select().id(comId).version(version).getSingleResult();
}
}


シーケンス番号とバージョン番号によるEntityの取得ですね。
Entityの特徴から新しいメソッドをS2JDBC-Genは設定してくれるのです、やりますね。簡単な内容ですので、スキップします、実行は。



メインはメインのテーブルのテストケースです。


<ServiceClass(自動生成)>

/**
* 識別子とバージョン番号でエンティティを検索します。
*
* @param userId
* 識別子
* @param comId
* 識別子
* @param version
* バージョン番号
* @return エンティティ
*/
public SUser findByIdVersion(String userId, Integer comId, Integer version) {
return select().id(userId, comId).version(version).getSingleResult();
}


<テストケース>

public void testSelect() throws Exception {
SUser expected = sUserService.findByIdVersion("1111", 301, 1);
assertEquals(expected.custName, "桜木 花道");
}


SQL文>

select T1_.USER_ID as C1_, T1_.PASS as C2_, T1_.CUST_NAME as C3_, T1_.CUST_NAME_KANA as C4_, T1_.COM_ID as C5_, T1_.PP_ID as C6_, T1_.CONTACT_ADD as C7_, T1_.MAIL as C8_, T1_.VERSION as C9_, T1_.REGIST_DATE as C10_, T1_.CHANGE_DATE as C11_, T1_.DELETE_DATE as C12_ from S_USER T1_ where T1_.USER_ID = '1111' and T1_.COM_ID = 301 and T1_.VERSION = 1


問題ないです、今までと同じですよね。



<ServiceClass2>

public SUser findByCompanyJoin(String userId, Integer comId, Integer version) {
return select().leftOuterJoin("scompany").id(userId, comId).version(version).getSingleResult();
}



<テストケース>

public void testSelectJoin() throws Exception {
SUser expected = sUserService.findByCompanyJoin("1111", 301, 1);
assertEquals(expected.scompany.comName, "スラムダンク");
}



SQL文>

select T1_.USER_ID as C1_, T1_.PASS as C2_, T1_.CUST_NAME as C3_, T1_.CUST_NAME_KANA as C4_, T1_.COM_ID as C5_, T1_.PP_ID as C6_, T1_.CONTACT_ADD as C7_, T1_.MAIL as C8_, T1_.VERSION as C9_, T1_.REGIST_DATE as C10_, T1_.CHANGE_DATE as C11_, T1_.DELETE_DATE as C12_, T2_.COM_ID as C13_, T2_.COM_NAME as C14_, T2_.VERSION as C15_, T2_.REGIST_DATE as C16_, T2_.CHANGE_DATE as C17_, T2_.DELETE_DATE as C18_ from S_USER T1_ left outer join S_COMPANY T2_ on T1_.COM_ID = T2_.COM_ID where T1_.USER_ID = '1111' and T1_.COM_ID = 301 and T1_.VERSION = 1



これも大丈夫です。



<ServiceClass3>

public SUser findByCompanyDivisionJoin(String userId, Integer comId, Integer version) {
return select().leftOuterJoin("scompany").leftOuterJoin("sdivision").id(userId, comId).version(version).getSingleResult();
}



<テストケース>

public void testSelectDivisionJoin() throws Exception {
SUser expected = sUserService.findByCompanyDivisionJoin("1111", 301, 1);
assertEquals(expected.sdivision.ppName, "湘北高校");
}



SQL文>

select T1_.USER_ID as C1_, T1_.PASS as C2_, T1_.CUST_NAME as C3_, T1_.CUST_NAME_KANA as C4_, T1_.COM_ID as C5_, T1_.PP_ID as C6_, T1_.CONTACT_ADD as C7_, T1_.MAIL as C8_, T1_.VERSION as C9_, T1_.REGIST_DATE as C10_, T1_.CHANGE_DATE as C11_, T1_.DELETE_DATE as C12_, T2_.COM_ID as C13_, T2_.COM_NAME as C14_, T2_.VERSION as C15_, T2_.REGIST_DATE as C16_, T2_.CHANGE_DATE as C17_, T2_.DELETE_DATE as C18_, T3_.PP_ID as C19_, T3_.PP_NAME as C20_, T3_.VERSION as C21_, T3_.REGIST_DATE as C22_, T3_.CHANGE_DATE as C23_, T3_.DELETE_DATE as C24_ from S_USER T1_ left outer join S_COMPANY T2_ on T1_.COM_ID = T2_.COM_ID left outer join S_DIVISION T3_ on T1_.PP_ID = T3_.PP_ID where T1_.USER_ID = '1111' and T1_.COM_ID = 301 and T1_.VERSION = 1



これも大丈夫です。



では、テストケースを「牧くん」に変えてみましょう。

public void testSelectDivisionJoin_Maki() throws Exception {
SUser expected = sUserService.findByCompanyDivisionJoin("3111", 301, 1);
assertEquals(expected.sdivision, null);
}



SQL文>

select T1_.USER_ID as C1_, T1_.PASS as C2_, T1_.CUST_NAME as C3_, T1_.CUST_NAME_KANA as C4_, T1_.COM_ID as C5_, T1_.PP_ID as C6_, T1_.CONTACT_ADD as C7_, T1_.MAIL as C8_, T1_.VERSION as C9_, T1_.REGIST_DATE as C10_, T1_.CHANGE_DATE as C11_, T1_.DELETE_DATE as C12_, T2_.COM_ID as C13_, T2_.COM_NAME as C14_, T2_.VERSION as C15_, T2_.REGIST_DATE as C16_, T2_.CHANGE_DATE as C17_, T2_.DELETE_DATE as C18_, T3_.PP_ID as C19_, T3_.PP_NAME as C20_, T3_.VERSION as C21_, T3_.REGIST_DATE as C22_, T3_.CHANGE_DATE as C23_, T3_.DELETE_DATE as C24_ from S_USER T1_ left outer join S_COMPANY T2_ on T1_.COM_ID = T2_.COM_ID left outer join S_DIVISION T3_ on T1_.PP_ID = T3_.PP_ID where T1_.USER_ID = '3111' and T1_.COM_ID = 301 and T1_.VERSION = 1



牧くんは海南大付属ですので、所属のオブジェクト自体がありません。



assertEquals(expected.sdivision.ppName, null);



テストケースをこのように記述すると、ヌルポが発生するので気をつけましょう。




では、出番がなかった仙道くんは削除しましょう。



<テストケース>

public void testDelete() throws Exception {
SUser entity = new SUser();
entity.userId = "2111";
entity.comId = 301;
entity.ppId = 51;
entity.version = 1;

int expected = sUserService.delete(entity);
assertEquals(expected, 1);
}



正常に削除できます。今回はCascadeの設定をしていませんが、



1.外部キーを作成する
2.以下のようにEntityに追加する

@ReferentialConstraint(onDelete = ReferentialActionType.CASCADE)
@ManyToOne
@JoinColumns(@JoinColumn(name = "PP_ID", referencedColumnName = "PP_ID"))
public SDivision sdivision;



この状態にて、仙道くんを削除すると、親(S_USER)と子(S_DIVISION)にあるデータが削除されます。