java - 在预更新事件时获取 hibernate 持久对象

标签 java hibernate jpa

我正在 java hibernate 4.3 中实现预更新事件监听器。 我需要在更新发生之前获取旧的持久对象值。 我尝试在 PreUpdateEventListener 中使用 event.getOldState() 。但它给出了 Object[] 作为返回类型。我想要持久对象作为返回值。

如何在preUpdateEvent中获取完整的持久化对象? preUpdateEventListener 已正确实现。 只需要获取完整的持久对象,而不是获取 Object[]。

还尝试了event.getSession().get(id,persisted.class);//这给出了新对象,因为 session 已经设置了要更新的新对象

下面是给出 Object[] 的代码

import org.hibernate.event.spi.PreUpdateEventListener;
import org.hibernate.event.spi.PreUpdateEvent;
public class MyEventListener implements PreUpdateEventListener  {
    public void onPreUpdate(PreUpdateEvent event)  {
        Object newEntity=event.getEntity();    //Gives new Object which will be updated.
        Object[] oldEntity=evetn.getOldState();    //gives old Object[] which can't be converted to persisted Object
        //Code here which will give me old persisted objects, hibernate fetches object in array format.
    }
}

最佳答案

如果我没记错的话,对象数组包含给定实体的所有属性值: 关联属性的索引可以使用属性名称数组来解析

 String[] propertyNames = event.getPersister().getEntityMetamodel.getPropertyNames();

这个link可能有用

关于java - 在预更新事件时获取 hibernate 持久对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156323/

相关文章:

java - JPA 问题 : Unable to build entity manager factory

java - AES Java 多线程异常

java - JPA 与 PostgreSQL - 简单关系

java - Hibernate Search - MySQL 错误太多与连接继承模型连接

java - 如何使用 Hibernate 在 Oracle 中保留 LARGE BLOB (>100MB)

java - x64/x86 上的 QueryDSL NumberPath/SimplePath 混合

java - "orphanRemoval = true"删除操作时未删除子对象

java - 无需在 Java 或 Python 中解压缩即可从 ZIP 存档中删除文件

java - 使用 Retrofit 反序列化带有文本和子标签的 XML 标签

java - 使用 javassist 通过字节码中的方法替换 java 运算符