java - 使用 Hibernate,拦截器接收与当前值和先前值相同的集合对象,如何获取真实的当前值和先前值?

标签 java hibernate

我有一个用于 Hibernate 托管对象的拦截器。 File 和 Customer 表有一个中间表 (FileCustomer),代表两者之间的多对多关系。这是在 Hibernate 中由 File 类管理的。

@OneToMany(mappedBy = "file", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
private List<FileCustomer> fileCustomers= new ArrayList<FileCustomer>();

我们更改 File 对象,包括替换一些 FileCustomer 对象(但不更改底层 Customer 对象)。

当调用 onFlushDirty 时,File 更新包含 File 对象的更改属性,一切正常。但是,包含 FileCustomer 对象列表的属性集合具有相同的先前值和当前值。

我错过了什么吗?我如何才能访问集合属性的旧值和新值?

最佳答案

检查这个post它会给您获取两个对象的想法,基本上您可以将 FileCustomer 存储在 preFlush 方法中,因此您可以将 onFlushDirty 中的集合与它进行比较。

关于java - 使用 Hibernate,拦截器接收与当前值和先前值相同的集合对象,如何获取真实的当前值和先前值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340167/

相关文章:

java - 为什么时间戳不以 UTC 时间存储?

java - 如何在 spring-boot 1.5.10 中升级 JUnit-5?

java - 将 .class 或 .java 文件作为 Eclipse 项目中的资源是否有任何限制?

Hibernate @OnDelete 级联同表

java - Spring数据-@Modifying(clearAutomatically = true,flushAutomatically = true)导致另一个实体无法更新

java - 如何使用 Hibernate 处理不同时区的日期

java - xml 数据文档末尾的额外内容

java - 空for循环的复杂度是多少?

java - Tomcat 安全管理器 - c3p0 和 hibernate

hibernate - 如何使用 Mockito 在 Hibernate 中模拟entityManager.getTransaction().begin()?