2015-04-01 68 views
0

我正在研究当前支持MSSQL和MYSQL的应用程序,现在我们需要使它与Oracle和Postgresql兼容。由于我们使用相同的Id为记录生成一些逻辑标识符,因此我们对为记录生成的Id有很强的依赖性。因此,我们希望每个表都具有自己的序列,以便每个新记录都有一个新的逻辑标识符是序列n,n + 1,n + 2,因此逻辑标识符将是XYn,XY(n + 1),XY(n + 2)。多个数据库支持使用休眠

对于Id使用生成策略AUTO可以同时使用MSSQL和MYSQL,但不能与Oracle或Postgresql一起使用,因为生成策略AUTO最终会映射到这些数据库的SEQUENCE。我需要为所有这些数据库维护一个通用代码,并且不能进行任何数据库更改。 请建议一些方法来完成此项工作。

+0

我记得有可能在POSTGRE中创建序列并将其用于适合您的ID生成。你检查了@Generated的文档吗? – Antoniossss 2015-04-01 07:43:41

+1

SEQUENCES有什么问题? – ibre5041 2015-04-01 08:16:10

+0

从我所知道的一个序列被数据库中的所有表共享。我所说的逻辑标识符必须为多个表维护,因此每个表都需要一个自己的序列。在Oracle中, – Sushant 2015-04-01 09:03:57

回答

0

为什么不使用UUID而不是序号?这更便携。

在Java中,已经有UUID的实现。

据我记忆,Oracle没有内置的顺序机制,所以你不能使用Hibernate的ID生成器。

+0

我们无法为ID使用UUID的原因是我在自己的问题中提到的依赖关系。每个记录使用的逻辑标识符是使用ID生成的,并且UUID不提供用户可以涉及的ID,即生成的ID是随机的。 – Sushant 2015-04-01 08:02:44

1

如果您想要在每个RDBMS中进行移植,那么GenerationStrategy=TABLE是一个解决方案。检查一些信息this article

+0

Upvote,因为没有提到性能限制,这基本上是让休眠完成所有工作的唯一方法。 – Gimby 2015-04-01 08:05:40

+0

正是我所担心的,保持共同的代码是需求,但性能更为重要。性能是应用程序的USP,我不能让性能受到影响只能容纳另一个数据库 – Sushant 2015-04-01 09:06:16

+0

除非您将开发自己的解决方案作为JPA的一部分,否则您将不得不为每个RDBMS部署应用程序版本,或者至少需要专门的DAO模块满足您的需求。 – Antoniossss 2015-04-01 09:08:08