我正在开发一个应用程序,它必须部署在多个环境中,使用不同的rdbms,即mysql、mariadb和oracle。这意味着不同的id生成模式(自动递增vs序列)。
jpa应该允许从rdbms中进行抽象。但是,我不知道如何配置 @Id
字段,以便它可以同时处理自动增量和序列。
// Auto-increment
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Sequence
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
1条答案
按热度按时间klr1opcd1#
作为参考,我找到了一个答案,似乎有些公司也遇到了同样的困难。答案目前可以在这里找到。
主要思想是:
使用
SEQUENCE
发电策略;提供一个jpa-xmlMap文件,覆盖基于java的注解Map;
在使用mysql(或其他序列不兼容的rdbms)运行时加载此Map文件。
这是可能的,因为:
xml元数据可以作为这些注解的替代品,也可以用来覆盖或扩充注解
-JPA2.1规范,11.1对象/关系Map注解
例如,引用上文我所链接的文章的例子,该实体将是:
Map文件是:
有关技术方面以及为什么不使用
AUTO
策略,请参考文章。