Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实体图上的JPA变更事件[EclipseLink]_Java_Hibernate_Jpa - Fatal编程技术网

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

Java 实体图上的JPA变更事件[EclipseLink],java,hibernate,jpa,Java,Hibernate,Jpa,我是否可以只使用JPA以某种方式跟踪整个实体图状态 考虑使用至少有一个集合的两个或三个类的层次结构 通过使用JPA@Post。。。注释我只能跟踪实际的实体,而不能跟踪其子实体和/或集合,因为它几乎只是数据库事件包装 我知道Hibernate可以做到这一点,但我不想依靠JPA的实现来实现这一点 如果有一种方法至少可以用EclipseLink做到这一点,我会非常高兴。不确定这是否是您要搜索的内容, 但您可以检测实体上的更改,如下所示: Account a = em.merge(account);

我是否可以只使用JPA以某种方式跟踪整个实体图状态

考虑使用至少有一个集合的两个或三个类的层次结构

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

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


如果有一种方法至少可以用EclipseLink做到这一点,我会非常高兴。

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

 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");

希望这能有所帮助

谢谢你的回答,但是没有。我已经在EclipseLink中找到了一种方法,因为EclipseLink处理@PostUpdate/。。。方法非常好(集合的更新被发送到拥有的实体,等等),而其他JPA很遗憾没有。我想我必须为我想在API中支持的每一个提供者提供一个自定义实现。我接受了这一点,因为我要求在EclipseLink中实现这一点就足够了。它有点不,但我是一个言而有信的人。很遗憾听到你现在必须做一个自定义实现。如果只有Hibernate能够满足您目前的需求,那么将其作为即将发布的JPA版本的一项功能进行请求可能是有意义的。EclipseLink也有一个可以工作的实现。在我看来,每个JPA提供商都必须拥有一些(至少是内部)事件系统,这些系统可以通过通用JPA API加以利用,但对于这一点,必须就事件的分发方式达成普遍共识。我目前正在为通用JPA进行Hibernate搜索改编(我需要这些事件),我正在与一些Hibernate开发人员联系。是的,作为即将发布的JPA的一个新特性,这无疑是有意义的。事实上,我想我会在将来的某个时候,当我的东西更成熟的时候,提出这个要求。