我有一个基于Spring的应用程序,该应用程序将JPA 2.1用于持久层。
我使用@TableGenerator和@GeneratedValue批注来处理主键ID生成。

这些是注释:

@TableGenerator(name = "user_gen", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 1)
…
@GeneratedValue(strategy = GenerationType.TABLE, generator = "user_gen")


我使用此实体在用户表中插入记录。
一切都很好。
现在我有一个新问题。外部应用程序需要在我的用户表中插入记录。这会导致我的主键冲突。

JPA中是否有任何选项可以根据用户表的最大ID更新id_gen表的gen_val值?

[我的研究中找不到这样的解决方案]

也欢迎其他解决此问题的想法。

最佳答案

您可以将其与自定义ID生成器配合使用,在该生成器中,您将在每次插入之前检查最大ID,但我不建议这样做。我认为,最好在数据库级别进行处理。

该应用程序如何生成ID?他们必须从某个地方获取它,所以为什么不为什么不在该步骤中处理id。最好的选择是是否可以使用相同的id_gen机制。几个想法:


插入数据后,他们可以调用您的存储过程,该过程将同步ID
他们可以在插入之前调用您的存储过程,这将为他们返回新行的ID
他们可以调用您的存储过程,该过程将插入数据,而不是直接将数据插入,而您将处理id

关于java - 使用@TableGenerator的JPA id生成表的动态值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29671162/

10-09 01:52
查看更多