gpt4 book ai didi

java - 集群环境中的 JPA TableGenerator 行为

转载 作者:行者123 更新时间:2023-12-01 10:03:24 24 4
gpt4 key购买 nike

我在我的项目中使用TableGenerator,下面是相同的代码片段。

  @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 TableGenerator 在集群环境中的行为是什么,即会有多个 JVM,因此每个 JVM 中相同的缓存最小/最大值是多少JMV 以及表:TABLE_GENERATOR 中将更新哪些值。

最佳答案

个人没有在集群环境中使用过 TableGenerator,相信它应该可以工作,但因为您访问的是单个表,所以总是有可能出现并发或事务问题。

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com