如何在JavaDB上将JPA与JavaEE7、GlassFish4.1和Maven结合使用

如何在JavaDB上将JPA与JavaEE7、GlassFish4.1和Maven结合使用,java,maven,jpa,netbeans,glassfish,Java,Maven,Jpa,Netbeans,Glassfish,我从Maven原型中得到了一个简单的Web Java EE 7项目(NetBeans:New project…->Maven->project from Archetype->webapp javaee 7)和 我想使用JPA将类映射到数据库表。 因此,我创建了一个新的JavaDB数据库,并在Glassfish中创建了相应的连接池和JDBCResSource。 现在我生成了一个非常简单的实体类,包含了所有必要的注释。 NetBeans给了我一个提示,说没有声明持久性单元,所以我创建了一个pers

我从Maven原型中得到了一个简单的Web Java EE 7项目(NetBeans:New project…->Maven->project from Archetype->webapp javaee 7)和 我想使用JPA将类映射到数据库表。 因此,我创建了一个新的JavaDB数据库,并在Glassfish中创建了相应的连接池和JDBCResSource。 现在我生成了一个非常简单的实体类,包含了所有必要的注释。 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>

jdbc/testDb
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>

org.eclipse.persistence
日食
2.5.2
假如
org.eclipse.persistence
org.eclipse.persistence.jpa.modelgen.processor
2.5.2
假如
然后我构建了这个项目并将其部署到Glassfish上。即使我没有收到任何错误,它也不起作用,这意味着数据库中没有创建相应的表

我非常确定与数据库的连接是正常的,因为它确实适用于随NetBeans交付的示例项目。 因此,我假设persistence.xml文件中需要一些额外的maven依赖项或一些特殊属性。
我尝试了在互联网上能找到的任何东西,但似乎没有任何效果…

你绝对没有做错什么。似乎由于JPA2.1/Glassfish 4.1,在创建表之前,您需要在某处使用您的PU。我知道GlassFish3.x中不是这样的,一开始我也有点困惑。在代码中的某个地方使用此代码就足够了,即在EJB中:

@PersistenceContext
private EntityManager em;

另见此答案:

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