【问题标题】:Unable to store UUIDs in H2 2.0.202 with Hibernate无法使用 Hibernate 在 H2 2.0.202 中存储 UUID
【发布时间】:2022-01-08 03:16:44
【问题描述】:

我们使用 H2 进行集成测试已经有一段时间了。现在 H2 2.0.202 已经发布,我们正在尝试将我们的代码库升级到它。我们无法持久化使用 java.util.UUID 作为类型的实体。考虑下面的例子

public class MyEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private UUID id;
}

如果我们尝试使用 Hibernate 将其保存在 H2 数据库中,则会失败并显示 JdbcSQLDataException 和消息 Value too long for column。测试很简单

@DataJpaTest
class H2Test {

  @Autowired MyRepository myRepository;

  @Test
  void testSave() {
    myRepository.save(new MyEntity());
    Assertions.assertThat(myRepository.findAll()).hasSize(1);
  }
}

您可以在 PasteBin 上找到完整的堆栈跟踪。

我们正在使用 org.hibernate.spatial.dialect.h2geodb.GeoDBDialect,这似乎是导致此问题的原因之一。如果我们删除它,上面的简单测试用例可以正常工作,不幸的是我们使用的是空间数据,所以我们需要这种方言。 我想知道这是否只是 H2 2.0.202 和 Hibernate 之间缺少兼容性?或者我们可以在配置中做些什么?我在 hibernate jira 中找不到与此问题匹配的问题,并且不知何故我也无法创建一个。

【问题讨论】:

    标签: hibernate spring-data h2 hibernate-spatial


    【解决方案1】:

    我很确定原因是 UUID 和 Hibernate / Hibernate Spatial 中的几何类型之间的冲突。参见例如本期:https://hibernate.atlassian.net/browse/HHH-11490

    这个问题应该在 5.4.31 及更高版本中得到解决。

    也可以通过显式注释id成员变量来解决 @Column(columnDefinition = "uuid")注解。

    【讨论】:

    • 哦,哇,这是个老问题了。我确实搜索过 Hibernate 问题,但丢弃了几个月前的所有内容......感谢您挖掘这个问题,我会在星期一回来工作时检查是否真的是这种情况。
    猜你喜欢
    • 2017-12-25
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2022-01-11
    • 2019-07-26
    • 1970-01-01
    • 2015-11-25
    相关资源
    最近更新 更多