我有以下实体类(在Groovy中):
import javax.persistence.Entity import javax.persistence.Id import javax.persistence.GeneratedValue import javax.persistence.GenerationType @Entity public class ServerNode { @Id @GeneratedValue(strategy = GenerationType.AUTO) Long id String firstName String lastName }
和我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="NewPersistenceUnit"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/Icarus"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value=""/> <property name="hibernate.archive.autodetection" value="class"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hbm2ddl.auto" value="create"/> </properties> <class>net.interaxia.icarus.data.models.ServerNode</class> </persistence-unit> </persistence>
和脚本:
import javax.persistence.EntityManager import javax.persistence.EntityManagerFactory import javax.persistence.Persistence import net.interaxia.icarus.data.models.ServerNode def factory = Persistence.createEntityManagerFactory("NewPersistenceUnit") def manager = factory.createEntityManager() manager.getTransaction().begin() manager.persist new ServerNode(firstName: "Test", lastName: "Server") manager.getTransaction().commit()
数据库 Icarus 存在,但当前没有表。我希望Hibernate基于实体类自动创建和/或更新表。我将如何完成?
我不知道离开hibernate前线是否会有所作为。
hibernate
该参考表明,它应该是hibernate.hbm2ddl.auto
hibernate.hbm2ddl.auto
值为create将会在创建sessionFactory时创建您的表,并保持它们不变。
create
值为create-drop会创建您的表,然后在关闭sessionFactory时将其删除。
create-drop
也许您应该javax.persistence.Table显式设置注释?
javax.persistence.Table
希望这可以帮助。