我正在使用 Spring Boot 和 Hibernate,并且在 H2 ( 2.1.210)中運行我的測驗時Values of types "BOOLEAN" and "INTEGER" are not comparable出現錯誤。這是由于@Query將布林值與整數進行比較。這在 Oracle 中可以正常作業。
@Query("FROM TABLE_NAME t WHERE t.value= 0")
public List<Example> findExample();
t.value是型別Boolean。
我發現了其他類似問題的問題,建議添加這個。
import org.hibernate.dialect.H2Dialect;
public class H2DialectExtended extends H2Dialect {
@Override
public String toBooleanValueString(boolean bool) {
return bool ? "TRUE" : "FALSE";
}
}
但是,這不起作用。
我該如何解決這個問題?
更新
H2/休眠設定 -application.yml
spring:
driver:
class-name: org.h2.Driver
datasource:
platform:
url: jdbc:h2:mem:project_name;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;
username: username
password:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
uj5u.com熱心網友回復:
如果這@Query("FROM TABLE_NAME t WHERE t.value= 0")正是您所擁有的,那么這意味著這是 JPQL 語言,而不是 SQL 語言。您比較它的方式,就像與此相關的物體有一個整數欄位,不應該是這種情況。java 欄位應該是boolean.
那么這應該是@Query("FROM TABLE_NAME t WHERE t.value= false")并且它可以同時適用于 Oracle 和 H2
默認情況下,當您使用像 hibernate 這樣的 ORM 供應商并且您擁有 Oracle 資料庫時,物體欄位boolean value將在資料庫級別匹配 Number(1) where0 == false和1 == trueORM 層的型別。
一種方法是讓您的物體欄位如下
@Type(type= "org.hibernate.type.NumericBooleanType")
private Boolean value;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445644.html
