Jpa 如何识别@PreUpdate中的EJB实体属性更改?
当持久化(更新)实体时,您将调用EntityManager.persist(entity)传递完整的实体。可以使用@PreUpdate进行拦截 有人知道如何识别在这个拦截器方法中哪些属性发生了变化吗?以某种方式比较新旧实体?更好的做法是实现一个泛型方法,而不是对每个类逐个字段进行比较 谢谢你的意见 Sven首先,persist()用于新对象(插入)而不是更新。在持久性上下文中更改的任何对象都将自动更新 JPA没有提供任何标准的方法来了解发生了什么变化。因此,您需要自己跟踪更改,或者使用JPA提供程序特定的API 在EclipseLink中,如果使用EclipseLink DescriptorReventListener预更新事件而不是JPA事件,则会将ObjectChangeSet附加到包含更改的DescriptorRevent 在JPA中,如果您正在使用编织,另一种方法是将对象强制转换为ChangeTracker并调用_persistence_getPropertyChangeListener(),然后调用getObjectChangeSet()Jpa 如何识别@PreUpdate中的EJB实体属性更改?,jpa,annotations,glassfish,entity,ejb,Jpa,Annotations,Glassfish,Entity,Ejb,当持久化(更新)实体时,您将调用EntityManager.persist(entity)传递完整的实体。可以使用@PreUpdate进行拦截 有人知道如何识别在这个拦截器方法中哪些属性发生了变化吗?以某种方式比较新旧实体?更好的做法是实现一个泛型方法,而不是对每个类逐个字段进行比较 谢谢你的意见 Sven首先,persist()用于新对象(插入)而不是更新。在持久性上下文中更改的任何对象都将自动更新 JPA没有提供任何标准的方法来了解发生了什么变化。因此,您需要自己跟踪更改,或者使用JPA提供
如果您使用的是TopLink Essentials,描述符事件也适用,但更改跟踪没有编制。相关:有没有类似于Hibernate的方法?