EclipseLink - bidirectional OneToMany relation

后端 未结 2 1866
悲&欢浪女
悲&欢浪女 2021-01-15 05:39

Let\'s say I have two entities:

@Entity
public class Customer implements Serializable {
    ...
    @OneToMany(cascade=ALL, mappedBy=\"customer\")
    public         


        
相关标签:
2条回答
  • 2021-01-15 06:06

    Jpa does not maintain relationships for you, the application is required to set both sides of bidirectional relationships to keep them in synch with the database. Add order to the orders list when you set the order->customer relation and if customer is detached, merge it to have the changes to the collection picked up.

    Otherwise you will need to explicitely refresh using em.refresh or a query with a refresh query hint after the transaction, or evict the customer from the caches. Either way, it requires a database hit that is easily avoided by just maintaining both sides of relationships.

    0 讨论(0)
  • 2021-01-15 06:06

    If you retrieve the customer from the same transaction, then yes, it's expected behavior. The reason is that the EntityManager returns the order it has in its first-level cache, and that you created yourself, without adding any order to its set of orders. It's your responsibility to maintain the coherence of the object graph by maintaining the two sides of the association:

    order.setCustomer(customer);
    customer.addOrder(order);
    
    0 讨论(0)
提交回复
热议问题