繁体   English   中英

集群环境中的JPA TableGenerator行为

[英]JPA TableGenerator behaviour in clustered envionment

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

  @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,依此类推,则每个线程或群集元素都能获得一个保证是唯一的范围。
  • 由冬眠支持

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM