【问题标题】:ConstraintViolationException using TableGenerator after updating dependencies更新依赖项后使用 TableGenerator 的 ConstraintViolationException
【发布时间】:2019-07-30 10:57:11
【问题描述】:

在将依赖项从 Spring 4.1.6.RELEASE 更新到 5.1.4.RELEASE 并将 Hibernate 4.3.9.Final 更新到 5.4.1.Final 之后,我的一些测试用例开始失败,主键上出现 ConstraintViolationException。

由于历史原因,我们像这样生成主节点:

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "NAME_HERE")
@TableGenerator(name = "NAME_HERE", table = "SEQUENCE_TABLE_NAME", pkColumnName = "Name", pkColumnValue = "ENTITY_NAME", valueColumnName = "VALUE_COLUMN_NAME", allocationSize = 100)

在正常使用应用程序时,它似乎没有问题,但是在运行测试时它会出现问题。

我注意到 ConstraintViolationException 仅发生在同一测试用例中插入多个值的表中。所以我认为这些行以某种方式分配了相同的主键。

在本地运行测试似乎不是问题,因此它也可能与测试在构建服务器上的运行方式有关。但是在升级依赖之前这不是问题。

我检查了序列值是否高于数据库中的最新值,但在升级依赖项之前这又不是问题。

我希望能唤起某人的记忆:-)

【问题讨论】:

    标签: java spring oracle hibernate


    【解决方案1】:

    我发现了这个: Hibernate, @SequenceGenerator and allocationSize

    这让我找到了“hibernate.id.new_generator_mappings”

    根据: https://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations

    *指示新的 org.hibernate.id.IdentifierGenerator 是否用于 AUTO、TABLE 和 SEQUENCE 的设置。

    现有应用程序可能希望禁用此功能(设置为 false)以兼容从 3.x 和 4.x 升级到 5.x。*

    将此设置为 false 解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-13
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2013-08-08
      相关资源
      最近更新 更多