群集环境中的JPA TableGenerator行为

时间:2016-04-15 00:15:40

标签: java hibernate jpa

我正在为我的项目使用表生成器,下面是相同的代码片段。

  @GeneratedValue(strategy = GenerationType.TABLE, generator =    " TableGenerator")
  @GenericGenerator(name = "TableGenerator", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = {
  @Parameter(name = "table_name", value = "TABLE_GENERATOR")}

我知道hibernate会在给定实体的内存中缓存最小值和最大值,并更新TABLE_GENERATOR中的最小值和最大值。让我们假设值可能是50-100。

但我不确定JPA / Hibernate表生成器在集群环境中的行为是什么,即将有多个JVM,因此每个JMV中的最小值/最大值是什么,以及将在哪个值中更新表:TABLE_GENERATOR

1 个答案:

答案 0 :(得分:1)

个人没有在集群环境中使用TableGenerator,相信它应该可以工作但是因为你遇到了单个表,所以总是存在并发或事务性问题的可能性。

IMO表生成的密钥仅在您不能使用大多数平台支持的序列号时才有意义,并且具有很多优点:

  • 保证唯一性
  • 在任何事务之外运行,因此没有锁定问题,不会重复使用由回滚引起的数字,无论
  • 支持缓存值,因此每个线程或集群元素都可以获得一个可以保证唯一的范围,如果缓存组为25,线程1为1-25,线程2为26-50等。等等。
  • 由hibernate支持

如果序列不是一个选项,这可能会有效,但我不相信没有漏洞可以解决。