hibernate:根据实体类自动创build/更新数据库表

我有以下实体类(在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根据实体类自动创build和/或更新表。 我将如何做到这一点?

6 Solutions collect form web for “hibernate:根据实体类自动创build/更新数据库表”

我不知道离开hibernate离开前面是否hibernate

参考build议它应该是hibernate.hbm2ddl.auto

create的值将在sessionFactory create时创build你的表,并保留它们的完整性。

create-drop值将创build您的表,然后在closuressessionFactory时将其删除。

也许你应该明确设置javax.persistence.Table注解?

希望这可以帮助。

您可以尝试在您的persistence.xml中更改这一行

 <property name="hbm2ddl.auto" value="create"/> 

至:

 <property name="hibernate.hbm2ddl.auto" value="update"/> 

这应该使模式保持每次运行应用程序时对模型所做的任何更改。

从JavaRanch得到这个

有时取决于如何设置configuration,属性标签的长格式和短格式也可以有所不同。

例如,如果你有这样的:

 <property name="hibernate.hbm2ddl.auto" value="create"/> 

尝试将其更改为:

 <property name="hibernate.hbm2ddl.auto">create</property> 

有一个非常重要的细节,可以阻止你的hibernate生成表(假设你已经设置了hibernate.hbm2ddl.auto )。 你还需要@Table注解!

 @Entity @Table(name = "test_entity") public class TestEntity { } 

在我的情况下已经帮了至less3次 – 还记不得了)

PS。 阅读hibernate文档 – 在大多数情况下,您可能不希望将hibernate.hbm2ddl.auto设置为create-drop ,因为它会在停止应用程序之后删除您的表格。

在applicationContext.xml文件中:

 <bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- This makes /META-INF/persistence.xml is no longer necessary --> <property name="packagesToScan" value="com.howtodoinjava.demo.model" /> <!-- JpaVendorAdapter implementation for Hibernate EntityManager. Exposes Hibernate's persistence provider and EntityManager extension interface --> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> </property> <property name="jpaProperties"> <props> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> </props> </property> </bean> 

Hibernate hbm2ddl.auto

在创buildSessionFactory时自动validation或将模式DDL导出到数据库。 使用create-drop,当SessionFactory被显式closures时,数据库模式将被删除。 例如validation| 更新| 创build| 创build降

请检查链接了解更多详情。

  • 用一个查询MySQL插入多行
  • 从报表中的两个表中查询
  • 从MySQL触发器调用PHP脚本
  • CONCAT'ing NULL字段
  • PostgreSQL无缝序列
  • selectMySQL中的最后一行
  • 我如何获得多个插入的行在MySQL中的ID?
  • 清除MySQL查询caching而无需重新启动服务器
  • 如何获得一个MySQL数据库的表的大小?
  • 在两个字段上使用group by,并在SQL中计数
  • 我如何使用密码散列与PDO使我的代码更安全?