当前位置:  开发笔记 > 编程语言 > 正文

Hibernate:基于实体类自动创建/更新db表

如何解决《Hibernate:基于实体类自动创建/更新db表》经验,为你挑选了3个好方法。

我有以下实体类(在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:



    
        org.hibernate.ejb.HibernatePersistence
        
            
            
            
            
            
            
            
            
        
        net.interaxia.icarus.data.models.ServerNode
    

和脚本:

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基于实体类自动创建和/或更新表.我怎么做到这一点?



1> toolkit..:

我不知道离开hibernate前面是否有所作为.

该参考表明,它应该是hibernate.hbm2ddl.auto

create将在sessionFactory创建时创建表,并保持原样不变.

create-drop将创建表,然后在关闭sessionFactory时删除它们.

也许您应该javax.persistence.Table明确设置注释?

希望这可以帮助.


这是hbm2dll.auto开头缺少的'hibernate'.谢谢!

2> billjamesdev..:

您可以尝试在persistence.xml中更改此行


至:


这应该保持架构以遵循每次运行应用程序时对模型所做的任何更改.

从JavaRanch得到了这个



3> Harbir..:

有时,取决于配置的设置方式,属性标签的长格式和短格式也会产生差异.

例如,如果你喜欢它:


尝试将其更改为:

create

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有