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 无法解析为变量
我怎么解决这个问题?
如果我在
@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)。然后,在读取实体的历史版本时,该关系将始终指向“当前”相关实体
| 归档时间: |
|
| 查看次数: |
5833 次 |
| 最近记录: |