我正在尝试使用一个简单的envers示例。我有Java代码(显然),我终于got the org.hibernate.tool.ant.EnversHibernateToolTask to work,但它只为“常规”数据输出SQL,而不是版本控制数据。我很难接受下一步的工作。
我可能忘记包括什么?
这是它输出的SQL:{versioning-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 :(得分:1)
请务必使用“@Audited”注释您的实体POJO。这可能解释了为什么没有创建审计表的DDL。
答案 1 :(得分:0)
杰森,
我也有这个问题 - 只要使用JPA标准/META-INF/persistence.xml配置,我就让Envers使用Hibernate。
当我切换到hibernate.cfg.xml时,不再配置Envers。然而,Envers确实支持Hibernate Session,这是我试图利用的,因为它比默认的JPA规范更强大。
此外,如果您不知道,Envers也会为您生成审核表,您只需要注释。
我在此期间仍然在寻找答案,但是如果没有Hibernate Session就可以生存,那么通过使用Hibernate作为通过/META-INF/persistence.xml配置的JPA提供程序,可以快速启动并运行Envers
沃尔特
答案 2 :(得分:0)
您显然缺少用于存储版本控制数据的属性,例如:
@Version
private Integer versionNumber;
// getters and setters
...