【问题标题】:JPA TableGenerator behaviour in clustered envionment集群环境中的 JPA 表生成器行为
【发布时间】:2016-04-15 00:15:39
【问题描述】:

我正在为我的项目使用表格生成器,下面是相同的 sn-p。

  @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_GENERATOR。

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

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

    IMO 表生成的密钥仅在您不能使用序列号时才相关 - 大多数平台都支持 - 并且有很多优势:

    • 保证唯一性
    • 在任何事务之外运行,因此不会出现锁定问题,也不会因回滚而导致数字重用等
    • 支持缓存值,因此每个线程或集群元素都可以获得一个保证唯一的范围,如果您缓存 25 个组,线程 1 获得 1-25,线程 2 获得 26-50,等等。等。
    • 受休眠支持

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

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2015-01-18
      • 2017-04-08
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多