当我在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
)然后获取所有产品(true
和false
)
请记住,null=null
,true=null
和false=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 |
|-------------|-------------|-------------|
换句话说,当status
为null
时,您需要一个始终返回false
的子句。当:status
为null
时,这将使为true,如果
:status
和status
具有相同的值,则为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语句吗?我不知道如何将两者等同起来。