我正在使用 OpenJPA 2.2.1 并希望执行以下操作:
1)加载实体 2)更改实体 3)在保存实体之前检查所做的更改
我做了什么:
1)通过加载实体
EntityManager.find(MyObject.class, id);
2)好的,很清楚,我想,就像
MyObject obj = EntityManager.find(MyObject.class, id);
obj.setName("New name");
3) 试图从 PersistenceContext 中逐出对象并通过以下方式从数据库中再次加载它:
EntityManager.evict(MyObject.class, id);
EntityManager.find(MyObject.class, id);
3) 中 find() 调用返回的实体始终与 1) 中找到的实体相等(相等 ID)
我想我可以通过驱逐从 PersistenceContext / 缓存中删除实体。
如何实现拥有两个不同的实体:a)更改的实体和 b)步骤 3 中加载的数据库中的原始实体)
并且:如果我 refresh() 实体,我希望 find 方法返回刷新的实体。那是对的吗?
我也尝试了 @PreUpdate 侦听器,结果相同,所以我认为关于 JPA PersistenceContext 或 Java 引用一定有一些我不理解的东西......
我希望我提供了足够的信息!提前致谢!