H2 Oracle 模式 - "BOOLEAN" 和 "INTEGER" 类型的值不可比较
H2 Oracle Mode - Values of types "BOOLEAN" and "INTEGER" are not comparable
我正在使用 Spring 引导和休眠,当 运行 我在 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/Hibernate 设置 - 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
如果这个 @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) 类型匹配,其中 0 == false
和1 == true
在 ORM 层上。
实现此功能的一种方法是让您的实体字段如下所示
@Type(type= "org.hibernate.type.NumericBooleanType")
private Boolean value;
我正在使用 Spring 引导和休眠,当 运行 我在 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/Hibernate 设置 - 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
如果这个 @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) 类型匹配,其中 0 == false
和1 == true
在 ORM 层上。
实现此功能的一种方法是让您的实体字段如下所示
@Type(type= "org.hibernate.type.NumericBooleanType")
private Boolean value;