实体图上的JPA更改事件[EclipseLink]

Mar*_*aun 7 java hibernate jpa

我可以通过仅使用JPA以某种方式跟踪整个Entity-Graphs状态吗?

考虑使用具有两个或三个类的层次结构,其中至少有一个Collection.

通过使用JPA @Post ... Annotations我只能跟踪实际的实体,而不是它的子项和/或集合,因为它几乎只是数据库事件包装.

我知道Hibernate可以做到这一点,但我不想依赖JPA的实现来做到这一点.

如果至少有一种方法可以使用EclipseLink,我会很高兴.

小智 7

不确定这是否是您正在搜索的内容,但您可以检测实体的更改,如下所示:

 Account a = em.merge(account);
 final JpaEntityManager jpaEntityManager = (JpaEntityManager) em.getDelegate();
 final UnitOfWorkChangeSet changeSet = jpaEntityManager.getUnitOfWork().getCurrentChanges();
 final ObjectChangeSet accountChangeSet = changeSet.getObjectChangeSetForClone(a);
 final ObjectChangeSet userChangeSet = changeSet.getObjectChangeSetForClone(a.getUser());
 em.clear();
 //checks only for these 2 specific fields; changeSet.hasChanges() would check for all changes
 return accountChangeSet.hasChangeFor("credits") || userChangeSet.hasChangeFor("name");
Run Code Online (Sandbox Code Playgroud)

希望这有点帮助.