在工作中,即時通訊使用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>
但休眠似乎忽視...
你在哪裏設置連接參數爲mysql? – Stephan
JDBC連接中的@Stephan。 (包括用戶名,密碼,端口號) – dognose
試試這個: ,你也可以檢查mysql進程列表來查看是否存在連接 –
Stephan