我有一个布尔类型的H2列,但是Hibernate使用1
/0
而不是TRUE
/FALSE
值来查询它,这导致了Values of types "BOOLEAN" and "INTEGER" are not comparable
语法错误。
例如,Hibernate 5将写入
WHERE myBooleanColumn = 1
代替
WHERE myBooleanColumn = TRUE
如何解决这个问题?
我的H2数据库版本是2.0.206,我使用的是Sping Boot 2.5.6。
5条答案
按热度按时间piah890a1#
您可以创建一个类来覆盖Hibenate的
Dialect
toBooleanValueString
方法:并将其加载到您的Sping Boot 测试
application-test.properties
中:这样,Hibernate将写入:
代替
这将解决问题,因为myBooleanColumn是H2布尔类型。
q3qa4bjr2#
这对我很有效(如果您使用Oracle模式):
我使用的是Sping Boot 2.7.X和H2 2.1.214。
8ulbf1ek3#
我知道这是一个老问题,但我遇到了同样的问题,并以不同的方式解决了它,所以我在这里陈述我的解决方案,如果有人在未来遇到这个问题。
它是基于波希米亚人的评论(我试图引用你,但我找不到一个方法,对不起。
他建议修改JDBC字符串中的连接方式,我的连接字符串是:
spring.datasource.url: jdbc:h2:mem:testdb;NON_KEYWORDS=USER;
(我有一个表“user”,所以我需要禁用H2的关键字检查“user”)。我必须特别添加数据库模式“
MODE=MySQL
”,以便它与我的布尔字段一起工作。这将生成最终的连接字符串:
spring.datasource.url: jdbc:h2:mem:testdb;NON_KEYWORDS=USER;MODE=MySQL
p3rjfoxz4#
如果在类型匹配中出现错误,可以使用MODE=....在
spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL
中指定它。但是由于某种原因,当我指定MODE=PostgreSQL时,它并没有解决我的问题。spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
而且类型匹配中的错误也消失了。
efzxgjgh5#
配置以下属性:
或者如果你使用yaml:
考虑升级到latest version of spring-boot(当前为2.6.2)。