jav*_*ude 6 entity annotations ejb jpa glassfish
当持久化(更新)实体时,您将调用EntityManager.persist(实体)传递完整实体.可以使用@PreUpdate进行拦截.
有没有人有一个配方如何识别这个拦截器方法中哪些属性已更改?以某种方式比较旧实体和新实体?甚至更好地实现通用方法,而不是逐个字段地比较每个类.
感谢您的任何意见!
斯文
首先,persist()是用于新对象(插入)而不是更新。持久性上下文中发生更改的任何对象都将自动更新。
JPA 不提供任何标准方法来了解发生了什么变化。因此,您要么需要自己跟踪更改,要么使用 JPA 提供商特定的 API。
在 EclipseLink 中,如果您使用 EclipseLink DescriptorEventListener preUpdate 事件而不是 JPA 事件,您将获得一个附加到包含更改的 DescriptorEvent 的 ObjectChangeSet。
JPA 中的另一种方法(如果您使用编织)是将对象转换为 ChangeTracker 并调用 _persistence_getPropertyChangeListener(),然后调用 getObjectChangeSet()。
如果您使用的是 TopLink Essentials,描述符事件也适用,但更改跟踪未编织。
| 归档时间: | 
 | 
| 查看次数: | 1812 次 | 
| 最近记录: |