gpt4 book ai didi

java - Hibernate Envers 不创建修订

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:20 26 4
gpt4 key购买 nike

我对 hibernate 环境有疑问。我添加了事件监听器并添加了@Audited 注释,但是当我更改名称(或其他任何内容)时,创建的数据库中没有任何修订。我希望你可以帮助我。

这是我构建 session 等的主类

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class Main {

public static void main(String[] args) {
new Main();
}

public Main() {

Configuration configuration = new Configuration().configure();
ServiceRegistryBuilder registry = new ServiceRegistryBuilder();
registry.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = registry.buildServiceRegistry();
SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();

Address address1 = new Address();
address1.setStreetName("Privet Drive");
address1.setHouseNumber(4);
Person person1 = new Person();


person1.setName("Hi");
person1.setSurname("test");
person1.setAddress(address1);

session.beginTransaction();
session.persist(person1);
session.persist(address1);
session.getTransaction().commit();

person1.setName("Hans");

session.beginTransaction();
session.persist(person1);
session.persist(address1);
session.getTransaction().commit();

session.close();


}

}

这里是 Person 类:

package Main;

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

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

@Entity
@Table(name="PERSON")
@Audited
public class Person{
@Id
@GeneratedValue
@RevisionNumber
private int id;

private String name;

private String surname;

private String username;

@ManyToOne
private Address address;

public int getId() {
return id;
}

public String getName() {
return name;
}

public String getSurname() {
return surname;
}

public Address getAddress() {
return address;
}

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

public void setName(String name) {
this.name = name;
}

public void setSurname(String surname) {
this.surname = surname;
}

public void setAddress(Address address) {
this.address = address;
}

public String getUsername() {
return username;
}

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

}

地址:

package Main;

import java.util.Set;

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

import org.hibernate.envers.Audited;

@Entity
@Table(name="ADDRESS")
@Audited
public class Address {
@Id
@GeneratedValue
private int id;

private String streetName;

private Integer houseNumber;

private Integer flatNumber;

@OneToMany(mappedBy = "address")
private Set<Person> persons;

public int getId() {
return id;
}

public String getStreetName() {
return streetName;
}

public Integer getHouseNumber() {
return houseNumber;
}

public Integer getFlatNumber() {
return flatNumber;
}

public Set<Person> getPersons() {
return persons;
}

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

public void setStreetName(String streetName) {
this.streetName = streetName;
}

public void setHouseNumber(Integer houseNumber) {
this.houseNumber = houseNumber;
}

public void setFlatNumber(Integer flatNumber) {
this.flatNumber = flatNumber;
}

public void setPersons(Set<Person> persons) {
this.persons = persons;
}


}

还有我的 hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/hwdb2</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">create</property>

<property name="hibernate.ejb.event.post-insert">org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.post-update">org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.post-delete">org.hibernate.ejb.event.EJB3PostDeleteEventListener,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 files -->
<mapping class="Main.Person" />
<mapping class="Main.Address" />
<mapping class="Main.ExampleListener" />
</session-factory>
</hibernate-configuration>

我希望你能为我提供解决方案。非常感谢!

最佳答案

我终于更新到Hibernate 4.1.8,问题解决了。我有错误的 envers 版本,它似乎与我使用的 hibernate 版本不兼容。

关于java - Hibernate Envers 不创建修订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com