JPA合并了@OneToOne实体关系

时间:2017-08-23 08:20:25

标签: java jpa eclipselink

我在两个JPA实体之间有一个@OneToOne关系,以下示例是简化的,而不是真正的实体名称。

@Entity
public class Stock {

    @Id
    private Long id;

    @OneToOne(fetch = FetchType.Lazy, mappedBy = "stock", cascade = CascadeType.ALL)
    private StockDetail detail;

}

和StockDetail

@Entity
public class StockDetail {

    @Id
    private Long id;

    @OneToOne
    @JoinColumn(name = "STOCK_ID")
    private Stock stock;
}

在我的示例中,我需要按ID搜索库存,然后使用merge更新库存明细,例如

Stock stock = em.find(Stock.class, 1L);
StockDetail detail = stock.getDetail();
// Do some updates to detail
detail = em.merge(detail);

此时使用调试器,我可以看到合并中返回的detail是更新的JPA实体。但是,当我再次执行以下操作时,我遇到了一个问题。

Stock stock = em.find(Stock.class, 1L);
StockDetail detail = stock.getDetail();

detail现在似乎已经拥有该实体的旧状态,我不确定上述内容有什么问题

1 个答案:

答案 0 :(得分:1)

这实际上是@NicoVanBelle和@ janith1024评论的组合。

  1. 有两个实体管理器,一个用于执行查找的非缓存em和一个用于执行合并的缓存em。
  2. 一旦我让非缓存的em在库存上进行合并,它就开始工作了。