2012-03-11 5 views
0

JPAで新しいノードをリストに挿入するにはどうすればいいですか?

class Dog{ 
String name; 
List<Leg> legs; 
//get and set 
} 

class Leg{ 
float lenght; 
} 

犬に新しいレグを追加するには(それは3を持って言うことができます): 1-クエリこの:犬から選択dがどこd.id = 1 d.legsに参加D私はこれを考えてみましょう 2 - 私は犬の参照をした後、私は新しい脚をリストに追加します: dog.getLegs()。add(new Leg(3.9));

3 - 犬をマージします。:em.merge(dog);

これはコレクションを更新する唯一の方法ですか?私は、犬のインスタンスが不要なヒープスペースを占めているかどうか疑問に思っています。 Java PROSありがとうございます。

答えて

0

パフォーマンスが心配な人は、エンティティ間の双方向関係を常に定義してから、もう一方の端から管理できます。

@Entity 
@Table(name = "dog") 
public class Dog { 
    private String name; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinTable(name = "dog_legs", joinColumns = { @JoinColumn(name = "dog_id", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "leg_id") }) 
    private Set<Leg> legs; 
} 

@Entity 
@Table(name = "legs") 
public class Leg { 
    private Integer length; 

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="legs") 
    private Dog dog; 
} 

この双方向マッピングを使用すると、Dogオブジェクトを読み込むコストだけでDogレッグを保存できます。

Dog d = entityManager.find(Dog.class, Long.valueOf(1)); 
Leg l = new Leg(); 
l.setDog(d); 
l = entityManager.persist(l); 
+0

ビッドマッピングはこれを使用する簡単な方法ですが、私はそれを使用することに同意しませんが、いつ本当に必要です。これは犬全体をロードするための唯一の選択肢ですか? –

+0

難しい方法をお探しですか?オブジェクトの属性を常に平坦化し、JDBCを手動でマップすることができます。 – Perception

+0

いいえ、私はOOPの依存関係の増加のような入札マッピングを見ています。Desing:S、doesnt it? –

関連する問題