2014-09-19 37 views
0

我已經從Maven Archetype(NetBeans:New Project ... - > Maven - > Project from Archetype - >)獲得一個簡單的Web Java EE 7項目 - > webapp-javaee 7)和 我想使用JPA爲了將類映射到數據庫表。 因此,我創建了一個新的JavaDB數據庫,並在Glassfish中創建了相應的連接池和JDBC-Ressource。 現在我生成了一個非常簡單的實體類,具有所有必要的註釋。 的NetBeans給了我一個提示,說是一個持久性單元不宣,所以我創建了一個persistence.xml文件如下:如何在JavaDB中使用JPA與Java EE 7,GlassFish 4.1和Maven

<?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-dependency或者一些特殊的屬性。 我嘗試了任何我可以在互聯網上找到的東西,但似乎沒有任何工作...

回答

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

相關問題