我在数据库中的表上方创建休眠实体。
实体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无法解析为变量
我怎么解决这个问题?
最佳答案
如果我在@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)。然后,在读取您实体的历史版本时,该关系将始终指向与“当前”相关的实体
关于java - Hibernate @Audited:NOT_AUDITED无法解析为变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43757338/