我从Maven Archetype获得了一个简单的Web Java EE 7项目(NetBeans:新项目...> Maven - >项目来自Archetype - > webapp-javaee 7) 我想使用JPA将类映射到数据库表。 所以我创建了一个新的JavaDB数据库,并在Glassfish中创建了相应的连接池和JDBC-Ressource。 现在我生成了一个非常简单的Entity-Class,它具有所有必要的注释。 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依赖或一些特殊属性。 我尝试过任何我能在互联网上找到的东西,但似乎没什么用......
答案 0 :(得分: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;