2009-06-20 53 views
0

我正在努力嘗試獲得一個簡單的Envers示例工作。我被困在org.hibernate.tool.ant.EnversHibernateToolTask —它看起來像我終於得到了我需要的所有jar文件,但現在我得到錯誤信息什麼是JPA配置?

[hibernatetool] Persistence unit not found: 'ConsolePU'. 

BUILD FAILED 
C:\deka\proj\java\test-database\build.xml:61: Persistence unit not found: 'ConsolePU'. 

據我所知,持久化單元與JPA persistence.xml文件關聯。但我沒有使用persistence.xml文件;我使用的hibernate.cfg.xml —但envers例如在螞蟻任務<jpaconfiguration>

<hibernatetool destdir="."> 
     <classpath> 
      <fileset dir="src/"> 
        <include name="**/*.hbm.xml"/> 
      </fileset> 

      <path location="${buildDir}" /> 
     </classpath> 
    <jpaconfiguration persistenceunit="ConsolePU" /> 
    <hbm2ddl 
     drop="false" 
     create="true" 
     export="false" 
     outputfilename="versioning-ddl.sql" 
     delimiter=";" 
     format="true"/> 
    </hibernatetool> 

是有什麼,我可以取代它,以讓它與hibernate.cfg.xml的工作文件?似乎有關於如何讓所有這些東西正常工作的ZERO文檔。

編輯: OK,所以主要的問題是我不明白的hibernatetool選項,什麼是適合我的應用程序。幸運的是,我確實發現了Hibernate ant docs。謝謝。現在我遇到一個新問題:我正在使用註釋,但我也爲屬性設置設置了hibernate.cfg.xml。 hibernatetool任務只允許我運行<configuration /><annotationconfiguration />不能同時運行,即使<configuration />也不能運行,因爲我已經有了註釋功能。我如何將我的屬性設置從hibernate.cfg.xml文件遷移到我的註釋中?

編輯:咄,我不知道你只是做:

<annotationconfiguration configurationfile="...filename..." /> 

hibernatetool task docs.

+0

完成(我希望)... upvoted但不被接受(沒有人碰到頭了) – 2009-06-22 14:14:36

回答

8

<configuration />標籤更換<jpaconfiguration />,在休眠的工具文檔詳細說明:

<configuration 
    configurationfile="hibernate.cfg.xml" 
    propertyfile="hibernate.properties" 
    entityresolver="EntityResolver classname" 
    namingstrategy="NamingStrategy classname"> 
1

你需要在一開始啓動:Sun's JPA tutorial

This也可能有幫助。

您需要創建persistence.xml並將其放入項目的META-INF目錄中。

Hibernate是JPA的一個具體實現,但也有其他的(例如JDO)。

+0

JDO是一種持久性規範,適用於任何類型的數據存儲。它不是*執行JPA。 OpenJPA是JPA的實現,DataNucleus或EclipseLink也是如此。 – DataNucleus 2009-06-20 09:33:35

+0

因此,當Google App Engine告訴他們需要JPA,並且Hibernate或JDO是我的兩個持久性實現選項時,您告訴我他們不知道他們在做什麼?聽起來像你在這裏爭論語義。 – duffymo 2009-06-20 10:39:54

+1

你說JPA的「還有其他」實現,並且在那裏提到了JDO。所以我簡單地糾正了這個聲明,因爲JDO與JPA沒有關係;-) Google AppEngine提供對JDO和JPA的支持,並且通過BigTable的JDO的DataNucleus實現和BigTable的JPN的DataNucleus實現提供支持。他們不支持Hibernate(僅用於RDBMS數據存儲)。顯然,如果需要的話,其他一些組可以爲BigTable數據存儲提供另一種JDO或JPA實現,具有持久性規範的好處。 – DataNucleus 2009-06-20 13:46:39

5

只給你高級別何衛青。 JPA是由SUN提供的標準持久性API。
您可以使用任何持久性框架(如Hibernate,TopLink,JDO等)作爲JPA的持久性提供程序。

所以只是爲了把事情說清楚

您的代碼-----> JPA ----->持久性提供者(休眠)。

由於它是標準庫,所以使用JPA是一種很好的做法。

那麼你的持久性提供者信息只應該被JPA知道,而不是你的代碼特定的XML。

這就是你的持久性。XML將看起來像

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
<persistence-unit name="QuarkFrameworkPU" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
</persistence-unit> 

而且你的應用程序上下文的樣子(依賴於JPA,沒有提到的Hibernate)

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
    p:driverClassName="com.mysql.jdbc.Driver" p:url="${db.url}" /> 




<!-- ADD PERSISTENCE SUPPORT HERE (jpa,etc) --> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="QuarkFrameworkPU" /> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true" /> 
     </bean> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 
1

你需要annotationconfiguration不jpaconfiguration。