0

監査にHibernateEnversを使用しています。正常に動作します。ただし、データを変更した直後にリビジョン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
    }  
}

では、たとえば以下のようにアドレスを更新する場合、リビジョンIDを取得するにはどうすればよいですか?

public class TestClass {
    updateAddress(address);

    // how to get rev id here?
}

ありがとう!

4

1 に答える 1

1

OK、私は自分で問題を解決しました。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 に答える