Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Hibernate应用程序独立于数据库?_Hibernate_Sequence - Fatal编程技术网

如何使Hibernate应用程序独立于数据库?

如何使Hibernate应用程序独立于数据库?,hibernate,sequence,Hibernate,Sequence,我们目前在项目内部使用Oracle 10g,这种情况不太可能改变,但最终我们将向其他客户提供此应用程序,我们需要能够提出另一种免费数据库 那么,使Hibernate持久层独立于所使用的底层RDBMS的最佳方法是什么呢?理想情况下,我希望能够更改JDBCURL和使用的方言,从而在(至少)Oracle10g和MySQL或PostgreSQL之间切换 主要问题来自ID生成策略。我们目前正在为ID使用基于序列的生成器,每个表有一个序列。显然,这一举措似乎转向了“本土”战略。但是,对于所有的表,它将是一个

我们目前在项目内部使用Oracle 10g,这种情况不太可能改变,但最终我们将向其他客户提供此应用程序,我们需要能够提出另一种免费数据库

那么,使Hibernate持久层独立于所使用的底层RDBMS的最佳方法是什么呢?理想情况下,我希望能够更改JDBCURL和使用的方言,从而在(至少)Oracle10g和MySQL或PostgreSQL之间切换

主要问题来自ID生成策略。我们目前正在为ID使用基于序列的生成器,每个表有一个序列。显然,这一举措似乎转向了“本土”战略。但是,对于所有的表,它将是一个唯一的序列吗?在Oracle上运行的生产系统中的现有数据会发生什么变化?如何迁移?陷阱是什么


从一种RDBMS/方言切换到另一种RDBMS/方言时,还有什么需要注意的吗?

我认为hilo ID生成器可以跨所有数据库移植。
但是如果您选择“native”,那么迁移数据库数据将面临一些挑战。最好在新数据库中从头开始,通过创建对象并使用Hibernate保存来初始化初始方案数据。这意味着不再通过从一个数据库转储/备份中恢复并删除事务行来初始化架构:)

谢谢,我还研究了hilo,它看起来是可移植的。但是,您认为我们如何迁移现有数据(使用现有ID和FKs等)而不与新生成的ID重叠?首先,我们必须找出每个表中最大的现有ID。然后决定max_lo(hilo生成器的参数)的值。例如,如果值max_lo=100,最大的现有ID是23456,那么我们应该将hi_value表的next_value字段更新为235,确保next ID从23500开始。