【问题标题】:How to use JPA with Java EE 7, Glassfish 4.1 and Maven on JavaDB如何在 JavaDB 上将 JPA 与 Java EE 7、Glassfish 4.1 和 Maven 结合使用
【发布时间】:2014-11-14 03:55:24
【问题描述】:

我有一个来自 Maven Archetype 的简单 Web Java EE 7 项目(NetBeans: New Project... -> Maven -> Project from Archetype -> webapp-javaee 7)和 我想使用 JPA 将类映射到数据库表。 于是我新建了一个JavaDB数据库,并在Glassfish中创建了对应的Connection Pool和JDBC-Ressource。 现在我生成了一个非常简单的实体类,具有所有必要的注释。 NetBeans给了我一个提示,说没有声明一个持久化单元,所以我创建了一个persistence.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU" transaction-type="JTA">
    <jta-data-source>jdbc/testDb</jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" value="create"/>
    </properties>
  </persistence-unit>
</persistence>

Maven 自动添加了以下依赖项:

<dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.5.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.2</version>
        <scope>provided</scope>
    </dependency>

然后我构建了项目并将其部署在 Glassfish 上。即使我没有收到任何错误,它也不起作用,这意味着数据库中没有创建相应的表。

我很确定与数据库的连接没有问题,因为它确实适用于 NetBeans 提供的那些示例项目。 所以我认为在persistence.xml 文件中需要一些额外的maven 依赖或一些特殊属性。 我尝试了几乎可以在互联网上找到的任何东西,但似乎没有任何效果......

【问题讨论】:

    标签: java maven jpa netbeans glassfish


    【解决方案1】:

    你没有做错任何事。似乎从 JPA 2.1 / Glassfish 4.1 开始,您需要在创建表格之前在某处使用您的 PU。我知道在 Glassfish 3.x 中不是这样,起初我也有点困惑。在代码中的某处使用此代码就足够了,即在 EJB 中:

    @PersistenceContext
    private EntityManager em;
    

    @PersistenceContext(unitName = "com.mycompany_mavenproject1_war_1.0-SNAPSHOTPU")
    private EntityManager em;
    

    另请参阅此答案:Entity Table is not creating using JPA 2.1

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多