我们已经使用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中没有找到匹配此问题的问题,也不知道为何无法创建一个问题。
@Column(columnDefinition = "uuid")
实际上解决了我在使用嵌入式H2 Spring Boot测试数据库按uuid查询时遇到的问题。谢谢。 - Chris