当前位置: 首页 > 知识库问答 >
问题:

错误:运算符不存在:boolean=bytea在spring jpa查询和postgres中

百里君博
2023-03-14

当我在postgres中直接执行下面的查询时,它工作正常,但当我使用JPA运行时,就会出现下面的错误。

查询示例:

select
    *
from
    products
where
    clientId = :clientId
    and ((:status is null
    and status in (true,
    false))
    or status = :status)
    and ((:anotherStatus is null
    and anotherStatus in (true,
    false))
    or anotherStatus = :anotherStatus);

错误:

ERRORorg.hibernate.engine.jdbc.spi.SqlExceptionHelper-ERROR:运算符不存在: boolean=byTea提示:没有运算符匹配给定的名称和参数类型。可能需要添加显式类型转换。

在JPA中配置如下:

@Query(value="select * from products where clientId = :clientId and ((:status is null and status in (true, false)) or status = :status) and ((:anotherStatus is null and anotherStatus in (true, false)) or anotherStatus = :anotherStatus)",nativeQuery=true)
List<Products> fetchProducts(@Param("clientId") Long clientId, @Param("status") Boolean status, @Param("anotherStatus") Boolean anotherStatus);

基本上我试图实现的是,当用户发送参数为true过滤器产品与true(活动)或作为false(活动),当用户不发送任何东西(这是null)然后获取所有产品(truefalse

共有1个答案

束帅
2023-03-14

请记住,null=nulltrue=nullfalse=null都求值为null,这在其中-子句中被视为false。如果你还想要什么,请重新措辞你的问题。让我们看一下(: stateisnull和state in(true, false))或state=: state的真值表。

|-------------|-------------|-------------|
|   :status   |   status    |   result    |
|-------------|-------------|-------------|
|    null     |    null     |    false    |
|    null     |    true     |    true     |
|    null     |    false    |    true     |
|    true     |    null     |    false    |
|    true     |    true     |    true     |
|    true     |    false    |    false    |
|    false    |    null     |    false    |
|    false    |    true     |    false    |
|    false    |    false    |    true     |
|-------------|-------------|-------------|

换句话说,当statusnull时,您需要一个始终返回false的子句。当:statusnull时,这将使为true,如果:statusstatus具有相同的值,则为true。

状态不为null且(:status为null或status=:status)

或者,

状态不为空且合并(:状态,状态)=状态

请注意,对于您描述的错误,这仍然失败,因为在Java中传递null时,Hibernate将:status绑定为BYTEA。你可以通过双重施放来解决这个问题。

CAST(CAST(:状态为字符变化)为布尔)

如果这是您的意图,那么结果查询将是:

SELECT *
FROM products
WHERE status IS NOT NULL
AND anotherStatus IS NOT NULL
AND COALESCE(CAST(CAST(:status AS CHARACTER VARYING) AS BOOLEAN), status) = status
AND COALESCE(CAST(CAST(:anotherStatus AS CHARACTER VARYING) AS BOOLEAN), anotherStatus) = anotherStatus

 类似资料:
  • 这个表的hibernate映射如下所述 在loginDetails.java中,我将id字段声明为long,userName和password字段声明为string。当我尝试执行以下命令时 我得到 我不明白哪里出了问题。如有任何帮助,不胜感激。

  • 使用Spring和Hibernate,我使用@query注释创建了一个查询,如下所示: 这是示例类: 当我从客户端调用:“url/getSamplesXAnalysis”时,它将执行: 并且没有给出错误或异常,我收到结果。但是,如果我试图在URL上使用参数,例如:“URL/getSamplesXAnalysis/2”,它将执行: 编辑2从长变长的参数方法: 返回IlelGalStateExcept

  • 这是我的存储库中的代码 我的控制器里有这个 我还注意到,如果我从(:subjects)中的s.subject_id的查询中删除这一部分,或者说我像(2,3,4)中的s.subject_id那样硬编码subjects值,代码将成功运行。但是,如果值来自请求,我就会得到错误。下面是请求的样子 本地主机:8080/评估/F3DF0BC2-7B4C-49B9-86C9-6E6B01628623/3/4/1

  • 执行简单查询时出现操作符不匹配错误。这是什么原因造成的? 表定义:

  • 问题内容: 我正在尝试在SpringData本机查询中使用Postgres jsonb字符串存在运算符。 SpringData方法示例: 在数据库中,哪里是JSOB类型。我试图用排除问号,但仍然出现以下错误: 有没有办法将此操作符与spring数据本机查询一起使用? 问题答案: PostgreSQL中的所有运算符都使用基础过程: 因此,您可以使用以下方式重写查询:

  • 选择查询打印三列,连接供应商名称和嵌套名称,并搜索名称: 我得到了错误: 错误:运算符不存在: 很好用。 有人可以协助JOIN语句吗?我不知道如何将两者等同起来。