Tag: hibernate envers

AuditException:由于非活动事务而无法创建修订

我一直在更新我的应用程序框架,现在我正在尝试使用JPA配置hibernate envers来审计一些域。 审计失败时,常规持久性正常,但错误如下 我有这个错误 org.springframework.orm.hibernate4.HibernateSystemException: Unable to create revision because of non-active transaction; nested exception is org.hibernate.envers.exception.AuditException: Unable to create revision because of non-active transaction at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:218) at org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:107) …. 我的配置是: true org.hibernate.dialect.MySQLDialect update org.hibernate.cfg.ImprovedNamingStrategy true org.hibernate.dialect.MySQLDialect true validate com.lotjm.domain.User com.lotjm.domain.Application com.lotjm.domain.Project com.lotjm.domain.Document com.lotjm.domain.AbstractAuditingEntity 有关如何修复它的任何建议? TKS

Hibernate使用自定义修订实体

我正在尝试扩展我的修订表。 按照手册我创建了自定义修订实体: package com.terminal.audit; import org.hibernate.envers.DefaultRevisionEntity; import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Transient; import java.util.Date; @Entity @RevisionEntity(CustomRevisionListener.class) public class CustomRevisionEntity extends DefaultRevisionEntity { @Id @GeneratedValue @RevisionNumber private int id; @RevisionTimestamp private long timestamp; private String username; public int getId() { return id; } public void setId(int id) { […]

为什么Hibernate Envers忽略了我的自定义RevisionEntity?

我正在使用Spring 4.0.2开发一个使用JPA 2.1(由hibernate 4.2.11支持)的应用程序。 我们使用Envers审核项目实体的变更。 这工作正常。 当我们尝试使用自定义修订实体作为Envers文档说: http ://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-revisionlog时出现问题 我们已经在文档中指出了一个自定义类和一个自定义监听器,但似乎Hibernate完全忽略了它们。 自定义类: @Entity @RevisionEntity(AuditingRevisionListener.class) public class AuditedRevisionEntity extends DefaultRevisionEntity { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } public class AuditingRevisionListener implements RevisionListener { private static Log log = LogFactory.getLog(AuditingRevisionListener.class.getName()); @Override public void newRevision(Object […]

如何使用Hibernate Envers检索带有@ManyToOne关系的审计寄存器

我怀疑使用Hibernate Envers和我的class级。 我有一个Lojaclass。 @Entity @Audited @GenericGenerator(name = “Sequence_Generic”, strategy = “com.paradigma.ecred.dao.hibernate.generator.ManualGenerator”) // sequence generic criado para a atividade 510 @SelectBeforeUpdate @DynamicUpdate public class Loja extends Persistent { @Trim @NotBlank(message = “O preenchimento do campo \”CNPJ\” é obrigatório.”) @CNPJ(message = “O \”CNPJ da loja\” é inválido”) private String cnpj; @Trim @NotBlank(message = “O preenchimento do campo […]

在Hibernate Envers中获取以前版本的实体

我有一个由Hibernate加载的实体(通过EntityManager ): User u = em.load(User.class, id) 该课程由Hibernate Envers审核。 如何加载以前版本的用户实体?

为什么我不能关闭HibernateSessionFactory并重新打开它仍然有效?

我在关闭Hibernate Session Factory时遇到问题,我的应用程序允许用户重新创建数据库,所以当他们想要首先关闭hibernate会话工厂以释放数据库中的Hibernates时。 public static void closeFactory() { if(factory != null) { factory.close(); } } 然后我等了几秒钟似乎有所帮助 Thread.sleep(10000); 然后我重新创建数据库,(FWIW常规hibernate和Envers – 我需要为要创建的Envers表创建工厂),然后再次关闭工厂。 public static void recreateDatabase() { Configuration config; config = HibernateUtil.getInitializedConfigurationAndRebuildAuditTables(); new SchemaExport(config).create(true, true); factory = config.buildSessionFactory(); factory.close(); factory=null; } 但是当我测试会话时: public static Session getSession() { if (factory == null) { createFactory(); } Session hibernateSession = […]

hibernate envers:merge&saveOrUpdate

我正在开发一个spring-hibernate-envers应用程序。 很多谷歌搜索后的东西终于为我工作但我还有几个问题。 之前我使用saveOrUpdate来保存或更新实体。 但是当使用envers时,它会抛出一个nonUniqueObjectexception。 所以我使用了merge而且它有效。 为此使用合并是否正确? merge是否merge新对象插入db? 我试过以下代码: entity=merge(entity); saveOrUpdate(entity); 这也有效。 这是正确的方法吗? 而且我很好奇为什么saveOrUpdate现在没有抛出任何错误。

Hibernate Envers:初始化Envers代理

在Hibernate Envers中,无论设置了什么类型,都会延迟加载实体的所有相关集合。 因此,当审计具有其他实体集合的实体(当然都是经过审计)时,该集合首先是一个SetProxy (在调试时可以看到)。 那么,我该如何初始化该代理呢? 使用Hibernate.initialize()没有任何效果(我怀疑是因为Hibernate和Envers使用不同的代理对象)。 我知道我可以通过迭代它的项目来初始化集合,但这对我来说不是一个选项,因为我在一个实体中有多个集合,更不用说维护问题了。 我需要急切地初始化它们,因为我在Hibernate会话已经关闭的时候访问该集合(将域对象转换为dtos)。 我正在使用Hibernate 3.5.6。

Hibernate Envers因@Converter和AttributeConverter而失败(JPA 2.1)

我正在使用带有Envers的Hibernate 4.3.4和MySql 5.6。 如果没有JPA 2.1转换器,下面的Party实体将在Configuration.buildSessionFactory()失败,因为Hibernate不知道如何处理Name类: @Entity @Audited public class Party { protected Name name; … } 例外是: org.hibernate.MappingException: Could not determine type for: ModuloADM.Party.Name, at table: Party, for columns: [org.hibernate.mapping.Column(name)] 要解决此问题,我然后添加此转换器: @Converter (autoApply=true) public class NametoStringConverter implements AttributeConverter { … } 现在exception变为: org.hibernate.MappingException: Could not determine type for: BasicType adapter for AttributeConverter, at table: History_Party, […]