0

我要疯了,试图让一个简单的Envers示例工作。我被困在了org.hibernate.tool.ant.EnversHibernateToolTask——看起来我终于得到了我需要的所有 jar 文件,但现在我收到了错误消息

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

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

据我所知,持久性单元与 JPApersistence.xml文件相关联。但我没有使用persistence.xml 文件;我正在使用 hibernate.cfg.xml - 但 envers 示例<jpaconfiguration>在 ant 任务中有一个:

<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 文件一起使用吗?似乎有关于如何让所有这些东西正常工作的零文档。

编辑:好的,所以主要问题是我不了解 hibernatetool 选项以及什么适合我的应用程序。幸运的是,我确实找到了Hibernate ant 文档。谢谢。现在我有一个新问题:我正在使用注释,但我还为属性设置设置了一个 hibernate.cfg.xml。该hibernatetool任务只能让我运行其中一个<configuration /><annotationconfiguration />两个都不运行,甚至<configuration />无法工作,因为我已经有注释在做事。如何将我的属性设置从 hibernate.cfg.xml 文件迁移到我的注释?

编辑:呃,我没有意识到你只是这样做:

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

根据hibernatetool 任务文档。

4

4 回答 4

8

将 替换为<jpaconfiguration />标签<configuration />,如 Hibernate Tools 文档中所述:

<configuration
    configurationfile="hibernate.cfg.xml"
    propertyfile="hibernate.properties"
    entityresolver="EntityResolver classname"
    namingstrategy="NamingStrategy classname">
于 2009-06-20T01:50:02.067 回答
5

只是为了给你高水平的先见之明。JPA 是 SUN 提供的标准持久性 API。
您可以使用任何持久性框架,如 Hibernate、TopLink、JDO 等作为 JPA 的持久性提供程序。

所以只是为了让事情清楚

您的代码 -----> JPA -----> 持久性提供程序(休眠)。

使用 JPA 将是一个好习惯,因为它是标准库。

因此,您的持久性提供程序信息应该只有 JPA 知道,而不是您的代码特定的 XML。

这就是您的 persistence.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>
于 2009-06-20T05:49:31.803 回答
1

您需要从头开始:Sun 的 JPA 教程

也可能有帮助。

您需要创建 persistence.xml 并将其放在项目的 META-INF 目录中。

Hibernate 是 JPA 的一种具体实现,但还有其他实现(例如,JDO)。

于 2009-06-20T01:39:44.133 回答
1

您需要注解配置而不是 jpaconfiguration。

于 2009-06-20T20:18:08.067 回答