首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >H2甲骨文模式-类型“布尔”和“整数”的值不可比较。

H2甲骨文模式-类型“布尔”和“整数”的值不可比较。
EN

Stack Overflow用户
提问于 2022-03-14 13:03:36
回答 1查看 1.3K关注 0票数 0

我使用Spring和Hibernate,在H2 (2.1.210)中运行测试时,我会得到一个Values of types "BOOLEAN" and "INTEGER" are not comparable错误。这是由于@Query将布尔值与整数进行比较。这在Oracle中是正确的。

代码语言:javascript
复制
@Query("FROM TABLE_NAME t WHERE t.value= 0")
public List<Example> findExample();

t.valueBoolean型的。

我发现了其他类似的问题,建议增加这一点。

代码语言:javascript
复制
import org.hibernate.dialect.H2Dialect;

public class H2DialectExtended extends H2Dialect {

    @Override
    public String toBooleanValueString(boolean bool) {
        return bool ? "TRUE" : "FALSE";
    }
}

不过,这不管用。

我怎么才能解决这个问题?

更新

H2/Hibernate设置- application.yml

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-14 14:15:58

如果这个@Query("FROM TABLE_NAME t WHERE t.value= 0")正是您所拥有的,那么这意味着这是JPQL语言,而不是SQL。比较它的方式,就像与此相关的实体有一个整数字段,不应该是这样。java字段应该是boolean

那么这应该是@Query("FROM TABLE_NAME t WHERE t.value= false"),它可以同时适用于甲骨文和H2。

默认情况下,当您使用诸如hibernate这样的ORM供应商并且您有一个Oracle数据库时,实体字段boolean value将在数据库级别上与数字类型(1)匹配,其中0 == false1 == true位于ORM层。

要做到这一点,一种方法是让您的实体字段如下所示

代码语言:javascript
复制
@Type(type= "org.hibernate.type.NumericBooleanType")
private Boolean value;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71468253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档