我有一個布爾型別的 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,我使用的是 Spring Boot 2.5.6。
uj5u.com熱心網友回復:
您可以創建一個覆寫 HibenateDialect toBooleanValueString方法的類:
package com.myCorp;
import org.hibernate.dialect.H2Dialect;
public class H2DialectExtended extends H2Dialect {
@Override
public String toBooleanValueString(boolean bool) {
return bool ? "TRUE" : "FALSE";
}
}
并將其加載到您的 Spring Boot 測驗中application-test.properties:
spring.jpa.properties.hibernate.dialect=com.myCorp.H2DialectExtended
這樣,Hibernate 將撰寫:
WHERE myBooleanColumn = TRUE
代替
WHERE myBooleanColumn = 1
這將解決問題,因為 myBooleanColumn 是 H2 Boolean 型別。
uj5u.com熱心網友回復:
配置這些屬性:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
或者如果你使用 yaml:
spring:
datasource:
url: jdbc:h2:mem:mydb
username: sa
password: password
driverClassName: org.h2.Driver
jpa:
spring.jpa.database-platform: org.hibernate.dialect.H2Dialect
考慮升級到最新版本的 spring-boot(當前為 2.6.2)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414188.html
標籤:
