使用ant和hibernate envers创建audity表
我对Hibernate Envers比较新,我尝试生成audity表,但没有成功:(…我正在使用使用ant和hibernate envers创建audity表,hibernate,ant,hibernate-envers,Hibernate,Ant,Hibernate Envers,我对Hibernate Envers比较新,我尝试生成audity表,但没有成功:(…我正在使用Hibernate-core-3.5.6-Final.jar和Hibernate-Envers-3.5.6-Final.jar) 我的第一次尝试是在我的hibernate.cfg.xml <hibernate-configuration> <session-factory> ... <property name="hbm2ddl.auto">update&l
Hibernate-core-3.5.6-Final.jar
和Hibernate-Envers-3.5.6-Final.jar
)
我的第一次尝试是在我的hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
...
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.ejb.event.post-insert">org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.post-update">org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.post-delete">org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.pre-collection-update">org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.pre-collection-remove">org.hibernate.envers.event.AuditEventListener</property>
<property name="hibernate.ejb.event.post-collection-recreate">org.hibernate.envers.event.AuditEventListene</property>
...
</session-factory>
但是update命令忽略了audity表,因此我尝试创建一个ant任务来生成一个schema ddl文件,因此在我的build.xml
文件中有一个任务,如:
<target name="schemaexport" description="Exports a generated schema to DB and file">
<echo message="generación schema "/>
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.EnversHibernateToolTask"
classpath="${CK_JARS}/hibernate-envers-3.5.6-Final.jar"/>
<hibernatetool destdir="${clases.dir}">
<classpath>
<fileset refid="hibernate-envers-3.5.6-Final.jar" />
<path location="${CK_JARS}/" />
</classpath>
<jpaconfiguration persistenceunit="ConsolePU" />
<hbm2ddl
drop="false"
create="true"
export="false"
outputfilename="C:/Desarrollo/versioning-ddl.sql"
delimiter=";"
format="true"/>
</hibernatetool>
</target>
这个配置显然不起作用,这是因为我不确定类路径中应该设置哪些值“找不到类org.hibernate.tool.ant.EnversHibernateToolTask
所需的taskdef类:org/hibernate/tool/ant/HibernateToolTask
”来自ant控制台的错误消息
你知道这两方面的问题出在哪里吗?我会回答自己,希望能尽力为别人解答 首先,为了能够使用envers,我几乎疯狂地配置我的
hibernate.cfg.xml
。最后我放弃了这个选项,迁移到JPA 2.0。为了设置JPA配置,必须在WEB-INF/classes/META-INF
目录中有一个persistence.xml
。在我的例子中,这个存档如下所示:
?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="****" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/EaliaPagosDTSource</jta-data-source>
<class>es.cecabank.ealiapagos.accesobd.model.EalUsusMediospEsts</class>
<class>es.cecabank.ealiapagos.accesobd.model.EalUsusAliasEsts</class>
...
<properties>
<!-- property name="javax.persistence.transactionType"
value="RESOURCE_LOCAL" /-->
<property name="hibernate.bytecode.use_reflection_optimizer" value="false"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.password" value="****"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:********"/>
<property name="javax.persistence.jdbc.user" value="****"/>
<property name="javax.persistence.jdbc.default_schema" value="****"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect"/>
<property name="hibernate.search.autoregister_listeners" value="false" />
<property name="hibernate.current_session_context_class" value="thread"/>
<property name="show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
?xml version=“1.0”encoding=“UTF-8”standalone=“否”>
org.hibernate.ejb.HibernatePersistence
java:/jdbc/EaliaPagosDTSource
es.cecabank.ealiapagos.accesobd.model.EALUSSEMEDIOSPESTS
es.cecabank.ealiapagos.accesobd.model.EalUsusAliasEsts
...
请注意,我正在为Transaction类型在配置中设置JTA。这非常重要,因为您管理事务的方式取决于此值。在我的例子中,我使用了在
标记中定义的数据源的事务,它指的是JBOSS配置文件standalone.xml
中声明的数据源。我将我的实体标记为with@Audited注释和审计表是在我将应用程序部署到JBOSS 7.1时自动生成的
如果有人需要更多的细节,请毫不犹豫地询问
?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="****" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/EaliaPagosDTSource</jta-data-source>
<class>es.cecabank.ealiapagos.accesobd.model.EalUsusMediospEsts</class>
<class>es.cecabank.ealiapagos.accesobd.model.EalUsusAliasEsts</class>
...
<properties>
<!-- property name="javax.persistence.transactionType"
value="RESOURCE_LOCAL" /-->
<property name="hibernate.bytecode.use_reflection_optimizer" value="false"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="javax.persistence.jdbc.password" value="****"/>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:********"/>
<property name="javax.persistence.jdbc.user" value="****"/>
<property name="javax.persistence.jdbc.default_schema" value="****"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect"/>
<property name="hibernate.search.autoregister_listeners" value="false" />
<property name="hibernate.current_session_context_class" value="thread"/>
<property name="show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>