【问题标题】:Dynamic values for JPA id generation table using @TableGenerator使用 @TableGenerator 的 JPA id 生成表的动态值
【发布时间】:2015-04-16 09:51:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: java spring jpa


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-18
      • 1970-01-01
      • 2016-10-21
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多