我在数据库中的表上创建了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无法解析为变量
我该如何解决这个问题?
答案 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)。然后,在阅读实体的历史版本时,关系将始终指向“当前”相关实体