首页 > 解决方案 > 用于两个应用程序的 liferay 单一数据库

问题描述

我有一个数据库,该数据库对于两个应用程序是通用的,其中一个在 Liferay 上运行,另一个在 Spring Boot 上运行。我正在从两个应用程序的一个表中插入值(主键设置为自动递增)。

我在服务生成器中有以下内容

<entity name="EntityName" local-service="true" remote-service="false" cache-enabled="false">
<column name="coloumnName" type="long" primary="true" id-type="increment" />

现在,应用程序尝试在表中插入值时出现重复主键错误。有人对此有解决方案吗?

标签: mysqlhibernateliferay-6liferay-service-builder

解决方案


id-type="increment"确实用于自增字段。从非常有据可查的服务构建器 DTD中的使用说明:(强调我的)

id-type 和 id-param 值用于在向表中插入记录时创建自动生成、自动递增的主键。这可以通过 4 种不同的方式实现,具体取决于所使用的数据库类型。在所有情况下,模型对象的主键都应该分配一个 null 值,Hibernate 会知道用自动生成的、自动递增的值替换 null 值。如果没有使用 id-type 值,则假定将分配主键并且不会自动生成。

如果您遵循在将新对象插入数据库之前手动设置主键的任何其他代码示例,则将为 ID 选择该值。由于您必须使用 Service Builder 实现胶水代码的某些部分,因此您很有可能已经在某处设置了主键。

如果您将 null 作为键传递,您将在插入后取回自动增量值。


推荐阅读