我在java hibernate 4.3中实现了预更新事件监听器。
我需要在更新发生之前获取旧的持久对象值。
我尝试在PreUpdateEventListener中使用event.getOldState()
。但它将Object []作为返回类型。我希望持久对象作为返回值。
如何在preUpdateEvent中获取完整的持久对象? preUpdateEventListener已正确实现。 只需要获得完整的持久化对象,而不是我得到Object []。
同时尝试event.getSession().get(id,persisted.class);
//这会在会话设置新对象以进行更新时提供新对象
下面是给出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.
}
}
答案 0 :(得分:1)
如果我记得很清楚,对象数组包含给定实体的所有属性值: 可以使用属性名称数组
来解析关联属性的索引 String[] propertyNames = event.getPersister().getEntityMetamodel.getPropertyNames();
此link可能有用
答案 1 :(得分:0)
我不确定侦听器如何使用纯Hibernate,但如果使用JPA事件侦听器,则实体作为参数传递给侦听器方法:
public class MyUpdateListener {
@PreUpdate
public void onPreUpdate(MyEntiy e) {
e.getAttribute();
// do something
}
...
如果在实体内部定义了一个侦听器方法,则只需访问状态this
@PreUpdate
public void onPreUpdate() {
getAttribute();
// do something
}