以下情况:
我有两个具有相同结构的数据库。在每个这些数据库的顶部使用Hibernate for ORM运行相同应用程序的实例。两者是完全独立的。
现在我必须将两个应用程序合并为一个。在某些表格中,需要进行调整以避免违反唯一键约束。
由于两个数据库在结构方面完全相同,并且使用了相同的Hibernate映射,有没有办法将Hibernate用于任务?我正在考虑从数据库A加载一个Object,在代码中修改它,然后简单地将它从基于数据库B的SessionFactory保存到Session。我想知道Hibernate是否能够相应地更新主键和外键值处理未从数据库A复制的对象的依赖性是多么困难(因为不再需要它们)。
有什么建议吗?
答案 0 :(得分:0)
从数据库A进行数据库转储并将其导入数据库B不是更容易吗?或者作为替代方法使用insert into B.table (col1,col2) values (select col1,col3 from A.table)
?
答案 1 :(得分:0)
如果您的数据库是MySQL,则使用MERGE存储引擎。以下是步骤:
- 在你的一个数据库中,使用cascade all通过Hibernate更新所有id。您的所有ID都必须按每个表上其他数据库的最后一个ID递增:
User1(2000行,lastId:2000)和User2(3000行,lastId:3000) - > User1(2000行,lastId:2000)和User2(3000行,firstId:3000,lastId:6000)
- 创建合并所有数据库的其他数据库
- 从新数据库中提取转储并在最终数据库中加载此转储 - > http://dev.mysql.com/doc/refman/5.0/en/merge-storage-engine.html
这是一种可能的方式:)
答案 2 :(得分:0)
我知道这是一个旧线程,但我遇到了类似的问题。
我解决了包括两个日期字段:included_date
和changed_date
到我的表中,而且,我还包括另一个字段来保存我上次在其他位置同步数据库的日期(我有一个配置表的表)信息)。
当我的系统连接到服务器时,我从上次同步发送日期,然后我的例程可以比较自上次同步以来包含或更改了哪些行。
每个新行我都会将日期设置到included_date
字段中,因此当我同步时,我知道在上次同步后创建了哪些行,那么我可以执行INSERT
。行更改和changed_date
字段也是如此,然后我执行UPDATE
。