JSFとJPA(Eclipseリンク)を使用してWebアプリケーションを開発しています。双方向のOneToMany関係を持つ2つのエンティティがあります。所有者エンティティは連絡先であり、ターゲットエンティティは顧客です。単一の顧客は、電子メール、電話などの複数の連絡先を持つことができます。エンドユーザーが新しい顧客を追加すると、連絡先もすぐに追加されます。その顧客に連絡先を追加した後でも、新しい顧客の保存をキャンセルする必要があります。私はその機能を追加しようとしましたが、以下のように失敗しました。JPA:主オブジェクトが永続化されている場合にのみ、配列内の子オブジェクトを永続化できますか?
このシナリオは永続性によって直接達成できますか?
お客様に新しい連絡先を追加する連絡先エンティティ
....
public class Contact implements Serializable {
....
@ManyToOne
Customer customer;
....
顧客エンティティ
....
public class Customer implements Serializable {
....
@OneToMany(mappedBy = "customer")
private List<Contact> contacts;
....
(現在は、Customerクラスのオブジェクトである)
Contact contact = new Contact();
contact.setCustomer(current);
....
current.getInstitutionContacts().add(contact);
電流があるとき、これは動作しますすでに永続しているまだ連絡先を追加しようとした場合、連絡先を保持するにはjava.lang.NullPointerException
があります。
私はこの機能を実現するために回避することができますが、連絡先をアレイに収集し、顧客が永続化されている場合にのみ永続化する方法はありますか?カスケード永続性や遅延フェッチなどを使用することで?
は、current.getInstitutionContacts()から来るNPEです。現在のものが新しい場合は、リスト配列を初期化する必要があります。データベースから読み込んだ場合、リストはプロバイダによって作成されます。 Customer-> contactsの関係でカスケード永続化/マージを設定すると、顧客がいるときに連絡先を保持することができます。 – Chris