【问题标题】:Hibernate Database changes休眠数据库更改
【发布时间】:2014-10-21 21:02:06
【问题描述】:

我们正在使用 Hibernate 从数据库中获取数据。问题是我们有时不得不改变我们的表格。事实上,我们多次遇到来自 Hibernate 的数据库映射对数据库无效的问题。

谁能给我一个提示如何解决这个问题?

简单示例:

今天的用户表如下所示:

  • 身份证
  • 姓名
  • 名字
  • 地址
  • 用户名

在未来它可能看起来像:

  • 身份证
  • 姓名
  • 名字
  • fk_Adress
  • 用户名
  • fk_Usergroup
  • fk_rightgroup

尽量保持轻松很重要。

我们正在使用 MsSQL 和 XML 映射。

我很感谢每一个建设性的答案。

【问题讨论】:

  • 您使用的是 XML 映射还是注解?
  • iam 使用 XML 映射

标签: java database hibernate mapping schema


【解决方案1】:

hibernate.cfg.xml文件中添加属性:

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

可用值:

验证 |更新 |创建 |创建删除

通过使用此属性,您需要更改 POJO 和 .hbm.xml 文件,它将自动更新到数据库。

createupdate 之间的区别在于,如果数据库表已经创建,update 将更新您的数据库,如果数据库表未创建,则更新。

create 将在数据库中创建表,即使表已经存在,它会删除所有表并重新创建表,导致之前插入的数据丢失。

【讨论】:

  • 感谢您的回答。 hbm2ddl 属性是已知的,也许我的问题是错误的。我想保持我的数据库原样,并且只需要更新我的映射以支持可用于任何数据库方案的独立项目。如果 hibernate 检查数据库然后更新我的映射,那将是完美的。
【解决方案2】:

如果您的数据库和您的 OO 代码是独立管理的,那么您可能无法避免这个问题。但是,如果您尝试集中发展您的数据模型,那么您可以做出选择——首先从 OO 端进行,然后更新数据库,或者修改数据库并更新 OO 端的映射。

如果您只关注数据库,那么映射将不得不迎头赶上。如果您想更轻松地做到这一点,那么发展 OO 模型并确保您使用的映射有意义 - 使用 hibernate 的 DDL 生成功能来自动更新数据库,或者将 DDL 写入新的数据库,以便您可以使用数据库比较工具来传播更新。

重大变化将是重大变化——这几乎是不可避免的。一般来说,如果您的数据库纯粹是为了支持 OO 系统,那么我建议您先从 OO 映射设计它。

【讨论】:

  • 我想更新我的 OO 映射以支持我必须将我的休眠项目导出到具有较旧数据库结构的客户的情况,以保留我的数据库并自动刷新我的映射。这可能吗?
  • 如果幸运的话,hibernate 的 hbm2ddl 功能可能会升级您客户的数据库,但这是有风险的。 stackoverflow.com/questions/438146/… 了解更多信息。您将不得不对此进行大量测试。更好的选择是使用该功能将最新代码的自然模式导出到新数据库,然后使用数据库比较工具(请参阅 Redgate 软件)生成需要在数据库上运行以升级它的脚本到你的代码现在需要的结构。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多