兼容Hibernate和EclipseLink的TableGenerator配置

时间:2018-10-30 07:53:57

标签: mysql hibernate spring-boot jpa eclipselink

TL; DR :为实体实现自定义TableGenerator的JPA方法是什么?

我们目前只有一个MySQL数据库,该数据库最初是使用EclipseLink生成(并已修改)的。

但是,我们最近决定实现访问数据库的Spring Boot应用程序,因此选择了Hibernate作为持久性提供程序。

实体的主键(ID)的生成如下(以Host.java为例)

@Id
@TableGenerator(name = "Host.id", schema = "schema", table = "SEQUENCE", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT", pkColumnValue = "Host.id")
@GeneratedValue(generator = "Host.id", strategy = GenerationType.TABLE)
protected Long id;

我们遇到的问题是,EclipseLink和Hibernate之间为新创建的实体生成ID的算法不同。到目前为止,我已经设法使用以下Hibernate(persistence.xml)设置来几乎获得我想要的结果:

<property name="hibernate.id.new_generator_mappings" value="true"></property>
<property name="hibernate.id.optimizer.pooled.prefer_lo" value="true"></property>

但是,两个JPA实现使用不同的算法来生成ID,在同时使用两个实现时会引起冲突。

我知道Hibernate @GenericGeneration批注允许您将生成器指向IdentifierGenerator的自定义实现,但是随后我们需要在我们的“数据模型”项目中包括Hibernate依赖项。 (与JPA实现无关)。

是否有一种方法可以修改我们的实体,使得EclipseLink和Hibernate使用相同的ID生成器实现?最好不要使用.xml文件覆盖注释。

参考文献:

0 个答案:

没有答案