【问题标题】:what the heck is a JPA configuration?JPA 配置到底是什么?
【发布时间】:2009-06-20 00:02:40
【问题描述】:

试图让一个简单的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'.

据我所知,持久性单元与 JPA persistence.xml 文件相关联。但我没有使用persistence.xml 文件;我正在使用 hibernate.cfg.xml — 但 envers 示例在 ant 任务中有一个 <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 文件一起使用吗?似乎有关于如何让所有这些东西正常工作的零文档。

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

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

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

根据hibernatetool task docs.

【问题讨论】:

  • 完成(我希望)...赞成但未被接受(还没有人一针见血)

标签: java hibernate jpa ant hibernate-envers


【解决方案1】:

&lt;jpaconfiguration /&gt; 替换为&lt;configuration /&gt; 标记,详见 Hibernate Tools 文档:

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

【讨论】:

  • +1 用于查找休眠工具的文档——我希望 envers 有类似质量的文档:(
【解决方案2】:

只是为了给你高水平的观点。 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>

【讨论】:

  • > 您可以使用任何持久性框架,如 Hibernate、TopLink、JDO 等作为 JPA 的持久性提供程序。不,你不能。您可以使用任何 JPA 实现。 JDO 是持久性规范,就像 JPA 是持久性规范一样。
  • 嗯不确定 JDO ..需要检查
【解决方案3】:

你需要从头开始:Sun's JPA tutorial

This 可能也会有所帮助。

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

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

【讨论】:

  • JDO 是针对任何类型数据存储的持久性规范。它不是 JPA 的实现。 OpenJPA 是 JPA 的实现,DataNucleus 或 EclipseLink 也是如此。
  • 所以当 Google App Engine 告诉他们需要 JPA,而 Hibernate 或 JDO 是我的两个持久性实现选择时,您是在告诉我他们不知道自己在做什么?听起来你在这里争论语义。
  • 您说“还有其他”JPA 实现,并在该上下文中提到了 JDO。因此,我只是更正了该声明,因为 JDO 与 JPA 无关;-) Google AppEngine 提供对 JDO 和 JPA 的支持,并且该支持是通过用于 BigTable 的 JDO 的 DataNucleus 实现和用于 BigTable 的 JPA 的 DataNucleus 实现提供的。它们不支持 Hibernate(仅适用于 RDBMS 数据存储)。显然,如果他们愿意,其他一些团队可以为 BigTable 数据存储区提供另一种 JDO 或 JPA 实现,这是拥有持久性规范的好处。
  • 好的,谢谢指正。看完你的简历后,我很高兴从权威人士那里得到关于这个主题的指导。
【解决方案4】:

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

【讨论】:

  • 知道了。 (从技术上讲,我需要注解配置或配置,但在我的情况下,我使用的是注解。)
  • 对,但注解配置是您最好的选择。当通过 ANT 使用 annotationconfiguration 和 hibernatetool 时,envers 人员刚刚解决了制作这些审计表架构的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2019-12-20
  • 2011-11-18
  • 1970-01-01
  • 2013-02-06
  • 2013-05-05
  • 2010-11-19
相关资源
最近更新 更多