休眠@Audited:NOT_AUDITED 无法解析为变量

New*_* 01 1 java annotations hibernate hibernate-mapping

我在数据库中的表上创建休眠实体。

实体 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 {
...
Run Code Online (Sandbox Code Playgroud)

唯一的问题是 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 无法解析为变量

我怎么解决这个问题?

cнŝ*_*ŝdk 7

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

NOT_AUDITED 无法解析为变量

您没有targetAuditMode正确使用:

@Audited(targetAuditMode = NOT_AUDITED)
Run Code Online (Sandbox Code Playgroud)

你应该使用是错误的RelationTargetAuditMode.NOT_AUDITED,不仅NOT_AUDITED因为RelationTargetAuditMode是一个 ENUM 以便访问我们使用的常量值RelationTargetAuditMode.CONSTANT_NAME

所以应该是:

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
Run Code Online (Sandbox Code Playgroud)

文档:

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

如果你想审计一个关系,其中目标实体没有被审计(例如类似字典的实体就是这种情况,它不会改变也不必被审计),只需用@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)。然后,在读取实体的历史版本时,该关系将始终指向“当前”相关实体