使用@TableGenerator的JPA id生成表的动态值

时间:2015-04-16 09:51:44

标签: java spring jpa

我有一个基于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值?

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用自定义ID生成器,在每次插入之前检查最大ID,但我不推荐它。在我看来,这最好在数据库级别处理。

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

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