2009-05-20 52 views
3

我有休眠的工作,並想嘗試添加Envers audit/revision functionality,但似乎無法弄清楚需要什麼。 (我的例子編譯並運行正常,我得到常規的Hibernate功能,但沒有審計表出現在我的數據庫中。)有人在那裏做過嗎?它使用HSQLDB方言使用H2數據庫嗎?網絡上有一個簡單的和完整的示例程序嗎?envers + hibernate入門(簡單和完整的例子)

編輯:讓我稍微修改一下。最後,我希望我的構建過程創建一個.jar文件,我可以將它安裝在另一臺計算機上,並使用適當的.properties文件和JDBC驅動程序創建(或允許我創建)適當的數據庫如果它們不存在,則使用表格。我怎樣才能做到這一點?

編輯:順利完成,那麼如果我要運行Ant任務傑米B已經建議,我必須調整我的類路徑,以便它找到envers JAR文件,並且被埋葬在Hibernate內部hibernate-tools jar文件工具zip。而且我還沒有得到工作。如果/當我這樣做時,我想也許可以創建一個SQL文件,並將其作爲資源放入我的最終.jar文件中,然後我可以從我的程序本身中使用它。 (雖然紅旗在我頭腦中忽略了安全問題......嗯......)

回答

1

您是否閱讀過參考文檔(www.jboss.org/file-access/default/members)的第6章/envers/downloads/envers-1.2.0.ga-hibernate-3.3.pdf)?看起來_AUD表不會以標準的Hibernate方式創建;有一個增強它的AntTask。

+1

其中@#%@%#是org.hibernate.tool.ant.HibernateToolTask​​找到了嗎? – 2009-06-04 16:37:45

2

這聽起來像你正在尋找下Hibernate屬性:

hibernate.hbm2ddl.auto 

documentation:創建 SessionFactory的時候

自動驗證或出口 模式DDL到數據庫。

這會自動創建根據您設置的envers properties命名的模式表。不需要額外的庫或螞蟻任務。

例如,我將這添加到我的hibernate.cfg.xml設置爲update爲我的開發數據庫。您還可以使用Hibernate的configuration對象以編程方式添加此屬性。

1

經過一些實驗,我得到了工作表的生成與envers

我用這些參數 hibernate.hbm2ddl.auto =創造降出現

錯誤,因爲表存在,所以我覺得,這個參數hibernate.hbm2ddl。汽車=更新將解決這個問題

登錄:

5755 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myappcompany.base.Company_AUD -> company_AUD 
5782 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.hibernate.envers.DefaultRevisionEntity -> REVINFO 
5915 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory 
6746 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured 
6784 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export 
6785 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database 
9004 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table company (ID bigint not null auto_increment, CREATED datetime, CREATED_BY varchar(255), MODIFIED datetime, MODIFIED_BY varchar(255), NAME varchar(255) not null, primary key (ID)) 
9004 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Table 'company' already exists 
10227 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete 

我的配置:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> 

    <!-- 
    Data Source config 
    --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close" p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}" 
     p:username="${jdbc.username}" p:password="${jdbc.password}" /> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" 
     p:entity-manager-factory-ref="entityManagerFactory" /> 

    <!-- 
    JPA config 
    --> 
    <tx:annotation-driven /> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" 
     p:persistence-xml-location="${persistence.xml.location}" 
     p:data-source-ref="dataSource"> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" 
       p:showSql="true" p:generateDdl="true"> 
      </bean> 
     </property> 
     <property name="jpaProperties"> 
      <value> 
       hibernate.ejb.naming_strategy=org.hibernate.cfg.DefaultNamingStrategy 
       hibernate.dialect=${hibernate.dialect} 
       hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto} 
      </value> 
     </property> 
    </bean> 

    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
</beans> 

在幾天我會做出一個完整的例子

+0

感謝這篇文章 - 這個問題到目前爲止我的任務隊列中,我不知道我有時間很快看到它,但我真的很感激它 - 我不得不放棄envers方法,因爲我只是沒有時間去弄清楚如何讓它起作用。 – 2009-11-18 13:16:33