我有一个数据库和一个Web应用程序的架构。我希望Web应用程序能够选择,插入和删除表中的行,但是 table 可能不存在,可能在测试环境中,并且该表可能缺少列因为该Web应用程序已更新。
我希望能够确保表已准备就绪,可以在应用程序处于活动状态时接受Web应用程序发送给它的数据。
我的想法是应用程序(用Java编写)将嵌入一个表结构,当应用程序启动时,只需将表中的所有数据(如果存在)复制到一个临时表中,然后删除旧表,并使用临时表的数据创建一个新表,然后删除该临时表。如您所知,它离创新还很遥远。
我的另一个想法是使用SHOW COLUMNS
命令更正与SHOW TABLES LIKE
平行的所有缺少的列,以检查是否存在,但是我觉得Stack Overflow会有更好的解决方案。那是我能做的吗?
答案 0 :(得分:0)
让JPA成为Hibernate。有hbm2ddl.auto属性。看起来“更新”选项可以满足您的要求。
有关更多详细信息 What are the possible values of the Hibernate hbm2ddl.auto configuration and what do they do
答案 1 :(得分:0)
有很多方法可以解决数据库版本和应用程序版本的一致性问题。 但是,在生产数据库中,这种情况是不可接受的。 我认为最简单的方法是最好的。 为了确保这种合规性,在执行测试之前执行一个更新数据库的脚本就足够了。
START TRANSACTION;
DROP TABLE ... IF EXISTS;
CREATE TABLE ...
COMMIT;
请记住有关IF EXISTS并获得DROP授予!
通过将脚本放入RCS并控制应用程序所需的版本号,可以轻松地管理该脚本。 您还可以将该版本号保存在数据库本身的某个表中,并检查应用程序启动时,该版本号是否与假定的版本号兼容以及是否不调用数据库更新脚本。