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