【问题标题】:persistence.xml ignores Hibernate and chooses DataNucleuspersistence.xml 忽略 Hibernate 并选择 DataNucleus
【发布时间】:2010-02-18 12:32:42
【问题描述】:

我正在玩弄 GWT(不知道这是否重要)和 Hibernate。我已经在 META-INF 中创建了一个文件 persistence.xml ,其中包含其他配置: org.hibernate.ejb.HibernatePersistence 但是当我启动 EntityManager 时,它会选择 DataNucleus 而不是 Hibernate(后来失败,因为它没有安装(jar 不在类路径中))

Java 代码是:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("gwt");
EntityManager em =factory.createEntityManager();
EntityTransaction transacation = em.getTransaction();
transacation.begin();
Campaign campaign = new Campaign();
campaign.setName("Test");
em.persist(campaign);
transacation.commit();

配置文件包含:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
  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"
  version="1.0">
  <persistence-unit name="gwt" transaction-type="JTA">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/DefaultDS</jta-data-source>
      <properties>
  ...

【问题讨论】:

  • 你确定你在类路径上没有任何其他persistence.xml(听起来很奇怪,因为你拿起了“gwt”持久性单元)
  • 你怎么知道它选择了DataNucleus?
  • 日志显示:15:11:48,048 INFO Persistence:77 - DataNucleus Persistence Factory - 供应商:“DataNucleus”版本:“1.1.5”15:11:48,048 INFO Persistence:77 - DataNucleus Persistence工厂初始化数据存储 URL="" driver="" userName="" 这绝对是正确的 xml 文件。因为当我将“gwt”更改为其他内容时,我会更早地收到错误
  • 我开始猜测我的 JPA/JTA 实现有误。 javax.persistence 在名为 geronimo-jpa.jar 的 Jar 文件中定义。 Hibernate 需要什么 jar 文件?我下载了整个 Hibernate 发行版,并假设其中包含 JPA 实现(如他们网站上所述)。我正在使用hibernate 3.5 - 有人能指出我为Hibernate 正确的JPA 实现吗?谢谢

标签: java hibernate gwt jpa datanucleus


【解决方案1】:

那么告诉我,你在 GAE/J 上使用这个吗? DataNucleus 显然在 CLASSPATH 中,因为它在您的日志中就是这样说的。

【讨论】:

  • 是的,我在 afaik 模拟 appengine 的 Eclipse/GWT 插件环境中使用它。我对hibernate和GWT都很陌生。我正在使用 main 方法运行上面的脚本一个单独的类,而不是在 appengine 的上下文中。
  • GAE/J Eclipse 插件适用于 AppEngine,因此适用于 BigTable;不知道什么是 GWT 插件。显然,Hibernate 不会为 BigTable 提供持久性。 DataNucleus 是 BigTable 的 JPA 持久性的唯一提供者。如果不打算坚持到 BigTable,建议您解决什么是您的开发环境
【解决方案2】:

引用 Google Plugin for Eclipse 文档中的 Creating a New Web Application 部分:

使用新建 Web 应用程序向导创建项目

新建 Web 应用程序项目向导 允许您创建一个新的网络 使用 Google Web 的应用程序 工具包 (GWT) 和/或 Google 应用 引擎:

您是否在项目创建时选择了使用 Google App Engine?如果是,请不要。

【讨论】:

    【解决方案3】:

    我使用了错误的 JPA Wrapper 类。我之前使用的是 geronimo-jpa.jar,最后我使用了 Glassfish 的 javax-persistance.jar。 不知道这是不是一个甜蜜的解决方案,但至少它是一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2020-05-31
      • 2016-03-15
      • 1970-01-01
      相关资源
      最近更新 更多