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

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


我知道休眠将为给定实体在内存中缓存最小值和最大值,并在TABLE_GENERATOR中更新最小值和最大值。假设该值可能是50-100。

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

最佳答案

我个人还没有在集群环境中使用过TableGenerator,因此认为它应该可以工作,但是由于您碰到的是单个表,因此总是存在并发或事务问题的可能性。

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


保证唯一性
可以在任何事务之外进行操作,因此不会发生锁定问题,也不会因回滚而重复使用任何数字
支持缓存值,因此,如果您缓存25个组,线程1获取1-25,线程2获取26-50,依此类推,则每个线程或群集元素都能获得一个保证是唯一的范围。
由冬眠支持


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

关于java - 集群环境中的JPA表生成器行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36636218/

10-11 04:59