我有一些简单的实体 bean(EJB 3.1、Glassfish、EclipseLink)的应用程序内缓存,因此我不必每次都使用 findById 在数据库中查找它们,因为应用程序需要快速。这些实体 bean 是只读的。
因此,例如实体 bean Country 或 Currency 位于本地缓存中。
Java EE 应用程序中的某些进程希望更新复杂的实体 bean(即客户),它使用上面的简单 bean(国家、货币...)。
然后发生的情况是,由于简单实体 bean 与 JPA 上下文的连接丢失,当在 Customer bean 上尝试 .merge() 时,JPA 希望将简单实体 bean 作为新记录保存在数据库中,尽管这些记录存在数据库中已经 100%,所以我猜这是一个“分离实体”问题。
例子。
Country country = getFromCacheByName("GB"); // detached entity, but exists in database
Customer customer = getCustomerFromJPA(); // existing JPA attached entity
customer.setCountry(country);
EntityManager.merge(customer); // pseudo code
如何修复最后一行或 bean (Customer) 本身,以便它不会尝试将依赖对象 (Country) 保存在 .merge() 上?
谢谢你。