我们正在使用Hibernate从数据库中获取数据。问题是我们有时会改变我们的表格。事实上,我们多次遇到Hibernate的数据库映射对数据库无效的问题。
有人能给我一个如何解决这个问题的提示吗?
简单示例:
今天用户表看起来像:
在Futur中,它看起来像:
尽可能保持简单是很重要的。
我们正在使用MsSQL和XML Mapping。
我感谢每一个建构性的答案。
答案 0 :(得分:2)
在hibernate.cfg.xml
文件中添加属性:
<property name="hibernate.hbm2ddl.auto">update</property>
可用值:
验证|更新|创建|创建降
通过使用此属性,您需要更改它将自动更新到数据库的POJO和.hbm.xml
文件。
create
和update
之间的区别在于,如果已创建数据库表,update将更新您的数据库,如果未创建数据库表,则将创建。
create会在数据库中创建表,即使表已经存在,它也会删除所有表并再次创建表,从而导致先前插入的数据丢失。
答案 1 :(得分:1)
如果您的数据库和OO代码是独立管理的,那么您可能无法避免此问题。但是,如果您正在尝试集中发展数据模型,那么您可以选择 - 首先从OO端执行此操作,并使数据库保持最新,或修改数据库并更新OO中的映射侧。
如果你只关注数据库,那么映射就必须赶上。如果你想更容易地做到这一点,那么改进OO模型并确保你使用的映射是有意义的 - 使用hibernate的DDL生成功能来自动更新数据库,或者将DDL写入一个新的DB以便你可以使用DB用于传播更新的比较工具。
重大变化将打破变革 - 这几乎是不可避免的。一般来说,如果您的数据库纯粹是为了支持OO系统,那么我建议首先从OO映射进行设计。