2009-06-23 72 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文件中的相關條目:Java類的

<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> 

相關部分:

@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

您正在使用什麼Hibernate和envers的版本? – 2009-08-17 17:38:08

回答

0

傑森,

我有這個問題太 - 我有Envers只要使用JPA標準/META-INF/persistence.xml進行配置,就可以使用Hibernate。

當我切換到hibernate.cfg.xml時,Envers不再被配置。然而Envers確實支持Hibernate Session,這是我試圖利用的,因爲它比默認的JPA規範更強大。

此外,如果您不知道,Envers也會爲您生成審計表,您所需要的只是註釋。

我仍然在尋找一個答案,但如果你可以在沒有Hibernate Session的情況下生活,你可以通過使用Hibernate作爲通過/ META-INF/persistence配置的JPA提供程序來快速啓動並運行Envers。 XML。

沃爾特

+0

如果你需要`Session`而不是`EntityManager`,爲什麼不使用`EntityManager.getDelegate()`? – whiskeysierra 2010-09-11 15:13:32

1

一定要與 「@Audited」 來註釋實體的POJO。這可以解釋爲什麼沒有創建審計表的DDL。

0

你顯然缺少存儲版本管理數據的屬性,如:

@Version 
private Integer versionNumber; 

// getters and setters 
... 
相關問題