Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate Envers审核未审核的实体_Java_Hibernate_Hibernate Envers - Fatal编程技术网

Java Hibernate Envers审核未审核的实体

Java Hibernate Envers审核未审核的实体,java,hibernate,hibernate-envers,Java,Hibernate,Hibernate Envers,我的项目中有几个类是由Hibernate处理的,有些是由Envers审计的,有些不是。现在,当我试图保存某个未经审计的实体时,我得到以下结果: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such table: audit_etc_etc) 有些人可能会认为我的数据库中没有审计表,但Envers甚至不应该尝试查找该表,因为实体没有被审计。我的课程是这样的: @Entity class A {

我的项目中有几个类是由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<B> 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<C> 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(…)
导致enver审计实体,从而尝试写入不存在的审计表。将
@NotAudited
添加到每个
@Audited(..)
解决了我的问题,也许您根本不需要这两个注释。

问题是您将yout属性标记为@Audited,以便enver尝试将它们作为它所属的类的一部分进行审核,并将其作为类本身的一部分进行审核。 您应该仅使用@Audited标记您的类声明以及其中要审核的属性:

@Audited
@Entity
public class AuditedEntity{
  ...
}
还有你的非审计类

@Entity
class A {
    AuditedEntity e;
    ...
}
如果在另一个受审核实体中使用AuditedEntity:

@Entity
@Audited
public class AnotherAuditedEntity {
    @Audited
    AuditedEntity e;
    ...
}

问题在于放置
@Audited
注释以标记未审核的关系。与其将注释放在实体
A
B
C
中,不如将注释放在实体
E
中与
A
B
C
的关系上

换言之:

@Entity
@Audited
public class E {
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private A a;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private B b;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)     
  private C c;
}
希望有帮助

@Entity
@Audited
public class E {
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private A a;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
  private B b;
  @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)     
  private C c;
}