Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate数据库更改_Java_Database_Hibernate_Mapping_Schema - Fatal编程技术网

Java Hibernate数据库更改

Java Hibernate数据库更改,java,database,hibernate,mapping,schema,Java,Database,Hibernate,Mapping,Schema,我们使用Hibernate从数据库中获取数据。问题是我们有时不得不换桌子。事实上,我们多次遇到这样的问题:来自Hibernate的数据库映射对数据库无效 有人能给我一个如何解决那个问题的提示吗 简单的例子: 现在,用户表看起来像: 身份证 名字 名字 地址 性 用户名 在未来,它可能看起来像: 身份证 名字 名字 fk_地址 性 用户名 fk_用户组 fk_右群 重要的是要尽量放松 我们正在使用MsSQL和XML映射 我感谢每一个建设性的回答。如果您的数据库和OO代码是独立管理的,那么您

我们使用Hibernate从数据库中获取数据。问题是我们有时不得不换桌子。事实上,我们多次遇到这样的问题:来自Hibernate的数据库映射对数据库无效

有人能给我一个如何解决那个问题的提示吗

简单的例子:

现在,用户表看起来像:

  • 身份证
  • 名字
  • 名字
  • 地址
  • 用户名
在未来,它可能看起来像:

  • 身份证
  • 名字
  • 名字
  • fk_地址
  • 用户名
  • fk_用户组
  • fk_右群
重要的是要尽量放松

我们正在使用MsSQL和XML映射


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

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

如果只关注数据库,那么映射就必须跟上。如果您想更容易地做到这一点,那么改进OO模型并确保您使用的映射是合理的—使用hibernate的DDL生成功能来自动更新数据库,或者将DDL写入新的数据库,以便您可以使用数据库比较工具来传播更新


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

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

<property name="hibernate.hbm2ddl.auto">update</property>
更新
可用值:

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

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

create
update
之间的区别在于,如果已经创建了数据库表,update将更新数据库;如果没有创建数据库表,update将创建数据库


create将在数据库中创建表,即使表已经存在,它也会删除所有表并再次创建表,从而导致以前插入的数据丢失。

您使用的是XML映射还是批注?iam使用XML映射谢谢您的回答。hbm2ddl属性已经知道了,也许我的queston公式错了。我想保持我的数据库不变,只需要更新我的映射以支持一个独立的项目,该项目可以用于任何db方案。如果hibernate检查数据库,然后更新我的映射,这将是完美的。我想更新我的OO映射,以支持这样的情况:我必须将我的hibernate项目导出给具有旧数据库结构的客户,保留我的数据库并自动刷新我的映射。这可能吗?如果幸运的话,hibernate的hbm2ddl功能可能会升级客户的数据库,但这是一个风险。更多信息。你必须对此进行大量测试。更好的选择是使用该功能将最新代码的自然模式导出到新的DB,然后使用DB比较工具(请参阅Redgate软件)生成需要在数据库上运行的脚本,以将其升级到代码现在需要的结构。