在更新前事件时获取hibernate持久对象

时间:2014-10-02 07:42:24

标签: java hibernate jpa

我在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.
    }
}

2 个答案:

答案 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
}