【发布时间】:2012-08-26 19:19:01
【问题描述】:
我有一个经常使用的项目,目前正在更新中。有几个地方可以安装这个项目,并且将来不确定在哪里使用哪个版本以及将来可能会更新到哪个版本。不过现在它们都一样。
我的问题源于这样一个事实:hibernate 实体类可能会有很多变化,并且必须很容易更新到新版本,没有任何麻烦,并且不会丢失数据库内容。只需替换 WAR 并启动,它应该会自行迁移。
据我所知,Hibernate 不会更改表,除非 hibernate.hbm2ddl.auto=create,但实际上会丢弃所有数据?
所以现在当 Spring 上下文完全加载时,它会执行一个 bean,该 bean 将通过从 versionX 到 versionY 的所有更改将数据库迁移到当前版本(它之前的版本保存在数据库中),并手动更改表格。
做一些硬编码的 ALTER TABLE 来添加一些列并不麻烦,但是当涉及到添加完整的新表时,不得不写所有这些感觉很愚蠢......
所以我的问题是这样的:
有什么办法可以将实体类和方言发送到 Hibernate 在某处编码,然后取回用于创建表的有效 SQL 查询?
更好的是,以某种方式创建一个 SQL 字符串以向表中添加列,方言安全?
我希望这不是一个愚蠢的问题,而且我没有错过 Hibernate 的一些明显的东西......
【问题讨论】:
标签: java spring hibernate hsqldb