2016-10-19 14 views
0

を取得するためにどのように私は以下のように、(例えば、ユーザ名用)の追加データを保存するために、私のカスタムRevisionEntityクラスを書いた:休止Envers - カスタムRevisionEntity - 記録

@Entity 
@RevisionEntity(AuditListener.class) 
@Table(name = "REVINFO", schema = "history") 
@AttributeOverrides({ 
     @AttributeOverride(name = "timestamp", column = @Column(name = "REVTSTMP")), 
     @AttributeOverride(name = "id", column = @Column(name = "REV")) }) 
public class AuditEntity extends DefaultRevisionEntity { 

    private static final long serialVersionUID = -6578236495291540666L; 

    @Column(name = "USER_ID", nullable = false) 
    private Long userId; 

    @Column(name = "USER_NAME") 
    private String username; 

    public Long getUserId() { 
     return userId; 
    } 

    public void setUserId(Long userId) { 
     this.userId = userId; 
    } 

    public String getUsername() { 
     return username; 
    } 

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

私は、データベース内のすべての行が正しくされていることがわかりますREVINFOテーブルにはユーザ名も含まれています。

ユーザー名のような私のカスタムRevisionEntityから詳細情報を取得するためにデータベースに問い合わせたいと思います。 どうすればいいですか?サポートするAPIはありますか?オブジェクトの配列が含まれています

final AuditReader auditReader = AuditReaderFactory.get(session); 
List<?> results = auditReader.createQuery() 
    .forRevisionsOfEntity(YourEntityClass.class, false, false) 
    .add(AuditEntity.id().eq(yourEntityClassId)) 
    .getResultList(); 

返される結果:

答えて

2

は、簡単に次のようなアプローチを使用して、その情報を照会することができ、あなたがのために改訂エンティティのメタデータに興味を持っているエンティティの識別子を知っていると仮定します、例えばObject[]ここで、results[1]は、あなたが望む関連情報を含むリビジョンエンティティインスタンスを保持します。詳細については

、あなたはJavaのドキュメントはあなたが唯一のリビジョン番号を持っている場合は、あなたがして直接ちょうど改訂エンティティインスタンスにアクセスすることができhere

のコメントを参照することができますの詳細については

// I use YourAuditEntity here because AuditEntity is actually an Envers class 
YourAuditEntity auditEntity = auditReader 
    .findRevision(YourAuditEntity.class, revisionId); 

AuditReaderインターフェースでは、Javaのドキュメントを見ることができます。here

+0

「YourEntityClass.class」は、「AuditEntity.class」を意味するものではありません。 私は 'YourEntityClass.class'も' yourEntityClassId'も持っていません。私は 'revisionId'しか持っていません。そして、IMOでは、エンバーが監査エンティティの共通オブジェクトを取得するのに十分なはずです。 – bontade

+1

指定したとおり、リビジョンエンティティのクラスタイプとリビジョン番号のみを使用するAPIを参照して更新されました。 – Naros

+0

ありがとう!できます – bontade