2009-06-20 48 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。