2013-05-17 120 views
0

在工作中,即時通訊使用Eclipse,Jboss和Hibernate JPA。對於一個較小的私人項目,我喜歡使用Netbeans,GlassFish和Hibernate JPA。NetBeans,GlassFish和Hibernate JPA

問題:我想讓hibernate自動生成表 - 但它不會那樣做。

我做了什麼:

  • 首先,我安裝了 - 明顯是顯而易見的 - Netbeans的,Glassfish和本地的MySQL數據庫。
  • 我創建了Glassfish的一個JDBC的連接:

    網址:jdbc:mysql://localhost:3306/myDatabase?zeroDateTimeBehavior=convertToNull

    名稱:myDatabaseJDBC

    司機:com.mysql.jdbc.Driver

連接似乎罰款, 「測試」 吧解決了成功的連接。

  • 現在我創造了這樣的persistance.xml:

    <?xml version="1.0" encoding="UTF-8"?> 
    <persistence version="2.0" 
        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_2_0.xsd"> 
    <persistence-unit name="primary" transaction-type="JTA"> 
        <provider>org.hibernate.ejb.HibernatePersistence</provider> 
        <jta-data-source>myDatabaseJDBC</jta-data-source> 
        <exclude-unlisted-classes>false</exclude-unlisted-classes> 
        <properties> 
         <property name="hibernate.hbm2ddl.auto" value="create"/> 
         <property name="hibernate.show_sql" value="true"/> 
        </properties> 
    </persistence-unit> 
    

  • 然後,我添加所需depoendencies到我的項目(使用maven)和Hibernate插件到GlassFish

什麼作品:當我創建了一個表,在Netbeans中,我可以選擇New -> Other -> Persistance -> Entity Class from Database。連接顯示錶,我選擇一個,點擊好,我得到了實體。

但是,我通常工作相反的方式並讓hibernate從創建的實體中生成我的表......那些誰不會工作。 (甚至在構建項目時,Hibernate甚至沒有被調用)

我是否錯過任何配置步驟?

更新:-------------

我想測試,如果Hibernate是 「積極的」 以任何方式。所以我創建了一個簡單的實體,一個控制器,並用一個按鈕部署了應用程序。

public void doSth() { 
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("primary"); 
    EntityManager em = emf.createEntityManager(); 

    CEntity c = new CEntity(); 
    c.setName("Test"); 

    em.persist(c); 
} 

首先,我接收到一個異常:

Caused by: org.hibernate.HibernateException: The chosen transaction strategy requires access to the JTA TransactionManager 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:376) 

Overhere:hibernate, mysql, glassfish v3, and JTA datasource我找到了解決

// For GlassFish: 
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup 

添加到persistance.xml。現在例外情況已經消失,但我收到另一個:Unknown Entity: CEntity

我想通了,hibernate無法找到我的實體。 (是的,我使用javax.persistance.Entity而不是hibernate命名空間中的那個)。但是,手動將實體「添加」到persistance.xml可以解決問題,並且還會調用自動創建表。

但是,現在我正在尋找正確的配置,因此不需要爲persistance.xml添加每個實體。

我設置<exclude-unlisted-classes>false</exclude-unlisted-classes>但休眠似乎忽視...

+0

你在哪裏設置連接參數爲mysql? – Stephan

+0

JDBC連接中的@Stephan。 (包括用戶名,密碼,端口號) – dognose

+0

試試這個:,你也可以檢查mysql進程列表來查看是否存在連接 – Stephan

回答

1

的關鍵是補充:

<property name="hibernate.archive.autodetection" value="class"/> 

到persistence.xml中的屬性集合。畢竟:

<persistence version="2.0" 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_2_0.xsd"> 
    <persistence-unit name="primary"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>myDatabaseJDBC</jta-data-source> 

     <properties> 
      <property name="hibernate.hbm2ddl.auto" value="create"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/> 
      <property name="hibernate.archive.autodetection" value="class"/> 
     </properties> 
    </persistence-unit> 
</persistence>