我有一个基于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值?
[我在研究中找不到这样的解决方案]
欢迎解决此问题的其他想法。
答案 0 :(得分:1)
您可以使用自定义ID生成器,在每次插入之前检查最大ID,但我不推荐它。在我看来,这最好在数据库级别处理。
该应用程序如何生成id?他们必须从某个地方获取它,所以为什么不在那一步中处理id。最好的选择是它是否可以使用相同的id_gen
机制。几个想法: