【发布时间】:2020-12-03 08:26:33
【问题描述】:
我正在使用 envers 来审核我的实体。我的代码看起来有点像这样
@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED )
@AuditOverride( forClass = Task.class, isAudited = true )
public class Job extends Task
{...}
@Inheritance( strategy = InheritanceType.JOINED )
@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED )
public class Task
{
...
@ManyToOne( fetch = FetchType.LAZY )
@LazyToOne( value = LazyToOneOption.NO_PROXY )
@Fetch( value = FetchMode.SELECT )
@JoinColumn( nam = "id_util" )
@Audited( targetAuditMode = RelationTargetAuditMode.AUDITED )
private Utility utility;
}
@Entity
@DynamicInsert
@DynamicUpdate
@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED )
public class Utility
{
@Override
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append( this.getClass().getName() ).append( "@" ).append( getId() );
builder.append( "[" );
appendAttributeValues( builder );
builder.append( "]" );
return builder.toString();
}
public Long getId()
{
return id;
}
}
当我尝试获取某个job 实体的修订版时,utility 字段未正确加载。相反,hibernate 给出了一个
Method threw 'org.hibernate.exception.GenericJDBCException' exception. Cannot evaluate Utility$HibernateProxy$9GVDBIUC.toString()
由字符串和数字组成的实体修订的其余部分加载得很好。在审核和查询没有继承结构的其他实体时,我也没有收到此错误。
实体Job、Task 和Utility 的_aud 表均已正确填写。什么可能导致此错误?
【问题讨论】:
-
您能否也包含
Utility实体的代码?谢谢 -
该实用程序包含简单类型和对与此问题不同的其他实体的引用。我添加了我正在使用的注释。
-
拜托,如果有的话,您能否至少包含实体的
toString方法定义? -
toString() 包括
-
谢谢。而方法
appendAttributeValues的定义是什么?我很抱歉地问,这个问题可能与方法 ```toString` 的实现中的一些代码有关。例如,假设您引用了一个不存在的关系或类似的东西。如果不是这样,我们可以考虑其他原因。
标签: java hibernate hibernate-envers