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

标签 java spring jpa

我有一个基于 Spring 的应用程序,它使用 JPA 2.1 作为持久层。 我使用 @TableGenerator 和 @GenerateValue 注释来处理主键 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_gen 表的 gen_val 值根据我的用户表的最大 id 进行更新?

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

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

最佳答案

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

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

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

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

相关文章:

java - 如何让我的 map 加载到 j2me 中?

java - 具有重复字母的按键及其字母顺序

java - 动态加载spring xml配置

java - 是否可以使用 hbm2ddl 为某个数据库列生成默认值

java - 执行 javadoc 注释

java - 使用 Java 只获取目录中的新文件

spring - @DataMongoTest 正在创建一个空的 MongoTemplate

java - 国际化网络服务

jpa - 加载 JPA 实体的 transient 字段

java - JPA 查询比较列表