java判断审核未审核_java – Hibernate Envers审核未审计的实体

我的项目中有几个由Hibernate处理的类,有些是由Envers审核的,有些则不是.现在,当我尝试保存某个未经审核的实体时,我得到了这个:

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: audit_etc_etc)

有些人可能会认为我在我的数据库中没有审计表,但是Envers甚至不应该尝试查找此表,因为实体未经过审计.我的课程看起来像这样:

@Entity

class A {

/* some 'normal' attributes here */

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)

AuditedEntity e;

List listOfBs;

}

@Entity

class B {

/* more 'normal' attributes here */

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)

AuditedEntity e; // and some more references to audited entities

A anA;

List listOfCs;

}

@Entity

class C {

/* more 'normal' attributes here */

@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)

AuditedEntity e; // and some more references to audited entities

B anB;

}

因此,每个类都包含一个子列表,其中包含对其父级的引用.这些类中没有一个用@ Audited-annotation标记,但它们引用了一些经过审计的实体.然而,每个引用都标有@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)-annotation.

我在hibernate.cfg.xml文件中也没有发现任何异常,只有连接细节,envers-options,类映射和其他一些hibernate选项.

这里有什么问题,如何解决保存时出现的问题?

(注意:我现在只针对A类和B类测试过这个,但我认为尝试保存C的实例会抛出相同的异常)

更新:

当我尝试保存B实例时,启用show_sql会显示:

Hibernate: update table_b set all_attributes=? where idB=?

Hibernate: insert into audit_description (timestamp, description) values (?, ?)

Hibernate: insert into audit_table_b (revision_type, attributes, moreAttributes, revision) values (?, ?, ?, ?)

解决方法:

问题是你将你的属性标记为@Audited,所以envers尝试将它们作为它所属的类的一部分进行审计,并将类审计为自身.

您只应使用@Audited标记您的类声明及其中要审核的属性:

@Audited

@Entity

public class AuditedEntity{

...

}

和你未经审计的课程

@Entity

class A {

AuditedEntity e;

...

}

如果您在另一个经审计的实体中使用AuditedEntity:

@Entity

@Audited

public class AnotherAuditedEntity {

@Audited

AuditedEntity e;

...

}

标签:java,hibernate,hibernate-envers

来源: https://codeday.me/bug/20190623/1272333.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值