JPA在合并期间作为管理实体的一部分分离实体
我有一些简单的实体bean(EJB 3.1,Glassfish,EclipseLink)的应用程序缓存,这样我就不必每次使用findById在数据库中查看它们,因为应用程序需要很快。 这些实体bean是只读的。
所以例如实体bean Country或Currency在本地缓存中。
发生在Java EE应用程序中的一些进程希望更新复杂的实体bean(即Customer),该实体bean使用上面的简单Bean(Country,Currency ...)。
然后会发生的是,因为简单的实体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(客户)本身,以便它不尝试将依赖对象(国家)保存在.merge()上?
谢谢。
在设置到客户之前,您应该先在该国进行查找()或合并()。 另外,确保它有正确的ID。
合并客户也应该工作,但如果它的Id已经存在,它会试图插入国家,这很奇怪,但这可能取决于你如何配置事物。 你在国家关系上合并了吗?
请注意,EclipseLink有它自己的缓存。 所以你的应用程序缓存可能不需要。
链接地址: http://www.djcxy.com/p/61415.html上一篇: JPA detached entity as part of a managed entity during merge