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

标签 java hibernate jpa

我在我的项目中使用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/

相关文章:

java - 使用在 C++ 中导入外部 jarfile 的 java 类

java - 如何使用 Jbutton 添加多个按钮

Hibernate:关于连接表的删除级联操作

java - 具有集合的 Hibernate 或 SQL 查询 M-N 成员?

java - 如何手动舍入?

java - 在不获取任何数据的情况下测试与 OData 的连接

java - OnDelete 级联失败并出现约束冲突错误 () Hibernate

java - JPA(Hibernate 支持)Maker-Checker 多级继承

java - 手动设置自动生成的 id 属性

java - spring-boot-starter-data-jpa 依赖错误