Hibernate @Audited:NOT_AUDITED无法解析为变量

时间:2017-05-03 10:21:26

标签: java hibernate annotations hibernate-mapping

我在数据库中的表上创建了hibernate实体。

实体A指的是实体B

@Entity
@Table(name="TABLE_A")
@NamedQuery(.. query="SELECT n FROM EntityA n")
public class EntityA {
....
@ManyToOne(...)
@JoinColumn(...)
private EntityB b;


@Entity
@Table(name ="TABLE_B")
@NamedQuery(.. query="SELECT n FROM EntityB n")
public class EntityB {
...

唯一的问题是EntityA标有@Audited注释(org.hibernate.envers.Audited),而EntityB则没有。

发布应用程序时,我在堆栈跟踪中收到以下错误:

  

引起:org.hibernate.MappingException:从EntityA到未经审计的实体EntityB的审计关系!这样的映射是可能的,   但必须使用@Audited(targetAuditMode =。)明确定义   NOT_AUDITED)。

如果我在@Audited(targetAuditMode = NOT_AUDITED)之上添加private EntityB b,Eclipse会给我以下错误

NOT_AUDITED无法解析为变量

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

如果我在@Audited(targetAuditMode = NOT_AUDITED)之上添加private EntityB b,Eclipse会给我以下错误

     

NOT_AUDITED无法解析为变量

您没有正确使用targetAuditMode

@Audited(targetAuditMode = NOT_AUDITED)

您应该使用RelationTargetAuditMode.NOT_AUDITED而不仅仅NOT_AUDITED是错误的,因为RelationTargetAuditMode是ENUM,因此要访问我们使用RelationTargetAuditMode.CONSTANT_NAME的常量值。

所以它应该是:

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)

<强>文档

我们可以从Hibernate Envers - Easy Entity Auditing Configuration看到它指示如何使用targetAuditMode属性:

  

如果要审计目标实体未经审计的关系(例如,类似字典的实体,不更改且不必审计),只需注释它即可@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。然后,在阅读实体的历史版本时,关系将始终指向“当前”相关实体