jboss hibernate envers hbm2ddl(EnversHibernateToolTask​​)为非审计实体创建审计表

时间:2013-07-01 11:57:07

标签: hibernate jboss hibernate-envers hbm2ddl

我第一次使用jboss envers它看起来不错。它似乎也很容易使用。

但是我遇到了一个问题:当我使用内置的ddl生成来从我的注释类创建ddl时,它会为我的所有类创建审计表,而不仅仅是我想要审计的那些。

例如,我有一个我注释如下的课程:

@Entity
@Table(name="partner")
@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
public class Partner  {

由于注释,我希望不会为此类创建partner_aud表。

但是,ddl是为partner和partner_aud创建的。

我做错了什么?

ant build config看起来像这样:

<hibernatetool destdir=".">
<classpath>
<path refid="toolslib" />
  <path location="/Users/matt/workspace/new_Pricing_Tool_PoC/lib/slf4j-api-1.5.8.jar" />
  <path location="/Users/matt/workspace/new_Pricing_Tool_PoC/lib/slf4j-log4j12-1.5.8.jar" />
  <path location="/Users/matt/workspace/new_Pricing_Tool_PoC/bin" />
<fileset dir="new_Pricing_Tool_PoC/lib/">
    <include name="*.jar"/>
  </fileset>
  <pathelement location="classes"/>
  <dirset dir="new_Pricing_Tool_PoC/bin">
    <include name="**/classes/**"/>
  </dirset>
</classpath>
<jpaconfiguration persistenceunit="pricing" />
<hbm2ddl
  drop="false"
  create="true"
  export="false"
  outputfilename="new_Pricing_Tool_PoC/db/auto-build.sql"
  delimiter=";"
  format="true"/>

另外,我已经确认hibernate确实使用审计表来存储Partner对象的过去修订版。

1 个答案:

答案 0 :(得分:0)

我发现这是由于误用了@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)注释。

通过从我的类定义中删除此注释,我解决了问题。

将审核实体链接到未审核的实体时,您将该注释添加到链接方法,如下例所示:

    @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
    @ManyToOne(optional=false)
    public Partner getPartner() {
        return partner;
    }

此方法取自Service.java,其中服务 已审核,但合作伙伴没有。