我在两个 JPA 实体之间有一个 @OneToOne
关系,以下示例是简化的,而不是真实的实体名称。
@Entity
public class Stock {
@Id
private Long id;
@OneToOne(fetch = FetchType.Lazy, mappedBy = "stock", cascade = CascadeType.ALL)
private StockDetail detail;
}
和库存详情
@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
现在似乎具有实体的旧状态,我不确定上面有什么问题
最佳答案
这实际上是 @NicoVanBelle 和 @janith1024 评论的组合。
- 有两个实体管理器,一个用于查找的非缓存 em,一个用于合并的缓存 em。
- 当我让非缓存的 em 对 stock 进行合并后,它就开始工作了。
关于java - @OneToOne 实体关系的 JPA 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834348/