2

2 つのエンティティがあるとします。

@Entity
public class Customer implements Serializable {
    ...
    @OneToMany(cascade=ALL, mappedBy="customer")
    public Set<Order> getOrders() { 
        return orders; 
    }
    ...
}

@Entity
public class Order implements Serializable {
    ...
    @ManyToOne
    @JoinColumn(name="CUST_ID", nullable=false)
    public Customer getCustomer() { 
        return customer; 
    }
    ...
}

次に、Customer エンティティを永続化し、その後、以前に追加した Customer を参照して Order エンティティを永続化します。この顧客をデータベースから取得して getOrders を呼び出すと、空のセットが返されます。それは正常な動作ですか?そうである場合、新しい Order エンティティを追加したときにこのセットを自動的に更新するにはどうすればよいですか?

4

2 に答える 2

2

同じトランザクションから顧客を取得する場合、はい、期待される動作です。その理由は、EntityManager が最初のレベルのキャッシュにある順序を返し、注文のセットに注文を追加せずに自分で作成したためです。関連付けの 2 つの側面を維持することによってオブジェクト グラフの一貫性を維持するのは、ユーザーの責任です。

order.setCustomer(customer);
customer.addOrder(order);
于 2013-05-26T18:28:22.043 に答える