【问题标题】:JPA TableGenerator update from another system从另一个系统更新 JPA TableGenerator
【发布时间】:2012-09-27 13:55:05
【问题描述】:

我有一个表,它有一个由表生成器生成的主键:

@TableGenerator(name = "resourceIdGenerator", table = "SEQUENCE", pkColumnName = "NAME", pkColumnValue = "resource_type_id", valueColumnName = "NEXTID", allocationSize = 1) 而且效果很好。

但是,我有另一个系统(非 java),它通过向其中插入新记录来不时修改同一个表。我想知道是否可以从另一个不使用 JPA 的系统更新我的这个表生成器的值?还是 JPA 自己维护它,它是唯一管理 tablegenerator 表的人?

【问题讨论】:

  • 如果我错了,请纠正我,但是tableGenerator与插入数据库中的记录无关,它只是生成表。

标签: java jakarta-ee jpa


【解决方案1】:

JPA 不能神奇地使用表格并禁止其他任何人使用它。如果您在其他系统中使用与 Hibernate 用于生成 ID 的策略相同的策略,那么它没有理由不起作用。

由于分配大小为1,你可能只需要启动一个新事务,select for update序列表的相应行,获取其值并将其加1。

【讨论】:

  • 是的,这正是我所做的,但我真的希望 JPA 以某种神奇的方式使用 tablegenerator 并在有人尝试插入 table 时相应地更新它,而我不必关心增量的关键。我什至尝试搜索数据库中是否没有 JPA 存储的一些存储过程并使用它们,但没有。但是我现在正在考虑制作这样的存储过程来增加密钥。
  • 这样的策略效率极低,并且会导致并发问题。它需要在每次插入时从实体表中获取最大 ID。并且序列表将不再有任何用途。
猜你喜欢
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多