2009-06-23 8 views
0

私は単純な例を得ることを試みています。envers私は(明らかに)Javaコードを動作させており、最終的にはgot the org.hibernate.tool.ant.EnversHibernateToolTask to workですが、バージョン管理データではなく「通常の」データに対してのみSQLを出力します。私は次に何をすべきか分かりません。簡単な例を得るのが難しい問題:#34

どのようなものを含めるのを忘れていますか?ここで

はそれが出力SQLです:{バージョニング-ddl.sql}

create table Event (
    id bigint generated by default as identity (start with 1), 
    date timestamp, 
    title varchar(255), 
    primary key (id) 
); 

create table Person (
    id bigint generated by default as identity (start with 1), 
    age integer not null, 
    firstname varchar(255), 
    lastname varchar(255), 
    primary key (id) 
); 

create table PersonEvent (
    eventID bigint not null, 
    personID bigint not null, 
    primary key (eventID, personID) 
); 

alter table PersonEvent 
    add constraint FK489E5C25F6E47374 
    foreign key (personID) 
    references Event; 

alter table PersonEvent 
    add constraint FK489E5C25729F3820 
    foreign key (eventID) 
    references Person; 

私は、任意の履歴テーブル/フィールドが表示されません。ここに私のhibernate.cfg.xmlファイル内の関連するエントリされています

<hibernate-configuration> 
    <session-factory> 
     ... 
    <property name="hibernate.ejb.event.post-insert">org.hibernate.envers.event.AuditEventListener</property> 
    <property name="hibernate.ejb.event.post-update">org.hibernate.envers.event.AuditEventListener</property> 
    <property name="hibernate.ejb.event.post-delete">org.hibernate.envers.event.AuditEventListener</property> 
    <property name="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener</property> 
    <property name="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener</property> 
    <property name="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListener</property> 
    <mapping class="com.example.test.hibernate.test1.Event"/> 
    <mapping class="com.example.test.hibernate.test1.Person"/> 
    </session-factory> 
</hibernate-configuration> 

とJavaクラスの関連部分:

@Entity 
@Audited 
public class Event { 
    @Id 
    @GeneratedValue 
    private Long id; 
    private String title; 
    private Date date; 
    ... 
} 


@Entity 
@Audited 
public class Person { 
    @Id 
    @GeneratedValue 
    private Long id; 

    private int age; 
    private String firstname; 
    private String lastname; 
    ... 
} 
+0

あなたは休止状態とenversのどのバージョンを使用していますか? –

答えて

0

ジェイソン、

私もこの問題を持っています - 私が持っていましたJPA標準/META-INF/persistence.xmlを使って設定されている限り、Hibernateを扱うエンバーサ。

私がhibernate.cfg.xmlに切り替えたとき、Enversはもはや設定されていません。 EnversはHibernate Sessionをサポートしていますが、これはデフォルトのJPA仕様よりも強力なので、私が利用しようとしているものです。

また、わからなかった場合、Enversは監査テーブルも生成します。注釈だけが必要です。

私はまだその間に答えを探していますが、Hibernateセッションなしで暮らすことができれば、Hibernateを/ META-INF/persistenceによって設定されたJPAプロバイダとして使用することで、Enversをすぐに起動できます。 xml。

ウォルター

+0

'EntityManager'の代わりに' Session'が必要な場合、なぜ 'EntityManager.getDelegate()'を使わないのですか? – whiskeysierra

1

"@Audited" を使用してエンティティのPOJOに注釈を付けるようにしてください。監査テーブルのDDLが作成されない理由を説明します。

0

あなたは明らかにバージョン管理データを格納するためのプロパティが欠落している、など:

@Version 
private Integer versionNumber; 

// getters and setters 
... 
関連する問題