0

我正在使用 Hibernate Envers 进行审计。它工作正常。但是,我尝试在修改数据后立即获取 rev id。我有 CustomRevisionEntity 如下:

import javax.persistence.Entity; 
import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RevisionEntity;

@Entity
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity extends DefaultRevisionEntity {

  private static final long serialVersionUID = 3775550420286576001L;

  private String username;

  public String getUsername() {
      return username;
  }

  public void setUsername(String username) {
      this.username = username;
  }
}

和 CustomRevisionListener:

import org.golf.repository.domain.entity.CustomRevisionEntity;
import org.hibernate.envers.RevisionListener;

public class CustomRevisionListener implements RevisionListener {

    public void newRevision(Object revisionEntity) {
        CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
        revision.setUsername("username"); // For testing
    }  
}

那么,当例如像下面这样更新地址时,如何获取 rev id?

public class TestClass {
    updateAddress(address);

    // how to get rev id here?
}

谢谢!

4

1 回答 1

1

好的,我自己解决了这个问题。只需在 CustomRevisionEntity 类中添加另一个属性,例如 revId。它将在 customrevisionentity 表中添加一个新列 revid。在 CustomRevisionListener 类中,添加类似的东西revision.setRevId(RevMapper.getRevId());,RevMapper 是包含静态属性 revId、getter 和 setter 的类。所以在TestClass中,你需要设置revId使用RevMapper.setRevId(id);

以上只是简单的解释,需要考虑revId是如何产生的等等。

于 2011-08-15T12:19:49.773 回答