2011年5月18日水曜日

JPA(Kuina-Dao) リレーション関係を持ったテーブルの更新、追加時の注意点

例)
親テーブル(1)と関係する子テーブル(N)を関係性を持たせ新規登録

// 親テーブル用Dao
private ParentDao parentDao;
// 子テーブル用Dao
private ChildDao childDao;

protected void doLogic() {
    // 親テーブルを登録
    Parent parent = new Parent();
    parent.setParentid("999");
    parentDao.persist(parent);

    // 子テーブルを登録 数分繰り返し処理
    for (int i = 0; i < 10; i++) {
       Child child = new Child();
       child.setChildid("ABC" + i);
       
       // 親テーブルPkeyを直に設定しない
       // child.seParent_pkey(11111);
       
       // 親entitiyをセット
       child.setParentt(parent);
       childDao.persist(child);                                                        
    }                                                         
}                                                         
子entity(N側)の親entityPkeyは、個別に設定しないようにする。 個別に設定しないように制約を付けるには、Columnアノテーションで insertable、updatableにfalseを設定することによって、 リレーションentitiyによる追加、更新以外を防ぐことが可能。
@javax.persistence.Entity
@javax.persistence.Table(name = "child")
public class Child {

・・・

@javax.persistence.ManyToOne(targetEntity = Parent.class ,fetch = FetchType.LAZY)
private Parent parent;


@javax.persistence.Column(name = "parent_pkey", insertable = false, updatable = false)
private Integer parent_pkey;

・・・
}

0 件のコメント:

コメントを投稿