2011-11-23 3 views
8

私はプロジェクトの監査を設定しようとしています。 私はうまく動作するデフォルトの設定から始めました。Enversを作成するカスタムリビジョンエンティティ

次の手順は、変更を加えたユーザーを保存することです。 私はカスタムエンティティのリビジョンを作成したマニュアルに従い:

package com.csbi.samples.utils.audit; 

import java.io.Serializable; 
import java.text.DateFormat; 
import java.util.Date; 

import org.hibernate.envers.RevisionNumber; 
import org.hibernate.envers.RevisionTimestamp; 
import org.hibernate.envers.RevisionEntity; 

import javax.persistence.Id; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Entity; 
import javax.persistence.Table; 
import javax.persistence.Transient; 

@Entity 
@Table(name="REVISIONS") 
@RevisionEntity(CustomRevisionListener.class) 
public class CustomRevisionEntity implements Serializable { 
private static final long serialVersionUID = -1255842407304508513L; 

@Id 
@GeneratedValue 
@RevisionNumber 
private int id; 

@RevisionTimestamp 
private long timestamp; 

private String username; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

@Transient 
public Date getRevisionDate() { 
    return new Date(timestamp); 
} 

public long getTimestamp() { 
    return timestamp; 
} 

public void setTimestamp(long timestamp) { 
    this.timestamp = timestamp; 
} 

public String getUsername() { 
    return username; 
} 

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

public boolean equals(Object o) { 
    if(this == o) return true; 
    if(!(o instanceof CustomRevisionEntity)) return false; 

    CustomRevisionEntity that = (CustomRevisionEntity) o; 

    if(id != that.id) return false; 
    if(timestamp != that.timestamp) return false; 
    if(timestamp != that.timestamp) return false; 
    if(username != that.username) return false; 

    return true; 
} 

public int hashCode() { 
    int result; 
    result = id; 
    result = 31 * result + (int) (timestamp^(timestamp >>> 32)); 
    return result; 
} 

public String toString() { 
    return "DefaultRevisionEntity(user = " + username + "id = " + id + ", revisionDate = " + DateFormat.getDateTimeInstance().format(getRevisionDate()) + ")"; 
} 

}

そしてまた、カスタムリスナー:

DEBUG:ORG

package com.csbi.samples.audit; 
import org.hibernate.envers.RevisionListener; 

public class CustomRevisionListener implements RevisionListener { 

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

} 

ここでは、ログからのいくつかの行であります.hibernate.envers.configuration.metadata.AuditMetadataGenerator - 最初の-pの生成エンティティ com.csbi.samples.domain.Propertyの監査エンジンマッピング。
DEBUG: org.hibernate.envers.configuration.metadata.AuditMetadataGenerator - エンティティの第2パス監査マッピングの生成 com.csbi.samples.domain.Property。
INFO:org.hibernate.cfg.HbmBinder - マッピングクラス:com.csbi.samples.domain.Property_AUD - > PROPERTIES_AUD
INFO:org.hibernate.cfg.HbmBinder - マッピングクラス: org.hibernate.envers。 DefaultRevisionEntity - > REVINFO

出力の最後の行を見てください。 CustomRevisionEntityの代わりにまだDefaultRevisionEntityがマップされています。

私は何が間違っているのか分かりません。助言がありますか?

+0

今は... "username"を意味のあるものに設定するにはどうすればいいですか?誰が修正を行っているのかわからないので、私は正しいことができませんか? –

+0

seamを使用している場合はスプリングまたはサービスファクトリを使用する場合は、静的変数を使用して注入します。 https://209.132.182.48/message/641790。希望が役立ちます。 – Vyacheslav

答えて

1

解決済み。エンティティは、Hibernateディレクトリによってスキャンされていません。

+1

あなたは共有してください。これをどのように達成し、エンティティが意味することは、Hibernateディレクトリによってスキャンされません。私のプロジェクトでは他のエンティティはうまく動作していますが、この1つではありません。 –

+1

hibernate configまたはhibernateディレクトリにhibernateがエンティティを探すSpring設定のhibernate部分にパッケージのリストがあります。上記のエンティティは、そのディレクトリにありませんでした。 – Vyacheslav

+1

ありがとう、これは私がHibernates 'SessionFactory'にエンティティを追加するのを忘れてしまったのを助けました:) – reap

関連する問題