在工作中,我使用 Eclipse、Jboss 和 Hibernate JPA。对于较小的私人项目,我喜欢使用 Netbeans、GlassFish 和 Hibernate JPA。
问题:我希望 hibernate 自动生成表格 - 但它不会为我这样做。
我做了什么:
- 首先,我安装了——很明显——Netbeans、Glassfish 和一个本地 MySQL-DB。
我为 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>
然后我将所需的依赖项添加到我的项目(使用 maven)和 Glassfish 的休眠插件
什么有效:当我创建一个表时,在 Netbeans 中我可以 Select New -> Other -> Persistance -> Entity Class from Database
。连接显示表格,我选择一个,单击确定,我得到了实体。
但是我通常以相反的方式工作,让休眠从创建的实体生成我的表......谁不会工作。(在构建项目时,甚至看起来甚至没有调用 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)
在这里:hibernate、mysql、glassfish v3 和 JTA 数据源我找到了要添加的解决方案
// For GlassFish:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
到persistance.xml。异常现在消失了,但我收到了另一个:Unknown Entity: CEntity
。
我想通了,hibernate 找不到我的实体。(是的,我使用javax.persistance.Entity
了而不是来自休眠命名空间的那个)。然而,手动将实体“添加”到persistance.xml
解决了问题,并且还调用了自动表创建。
但是,现在我正在寻找正确的配置,因此不需要将每个实体添加到 persistence.xml。
我设置<exclude-unlisted-classes>false</exclude-unlisted-classes>
但休眠似乎忽略了这一点......