我想要一个JPQL查询,可能看起来像:
entityManager.createQuery("Select a.* from A a WHERE CAST(a.num AS TEXT) LIKE '%345%' ", A.class);
Run Code Online (Sandbox Code Playgroud)
其中a.num是整数。我想将此转换为String以使用LIKE标准。但是,上面的转换在JPQL中不起作用。关于如何实现这一点的任何想法?
我在使用postgres 9.4实例获取此本机查询时遇到问题.
我的存储库有一个方法:
@Query(value = "SELECT t.* " +
"FROM my_table t " +
"WHERE t.field_1 = ?1 " +
"AND t.field_2 = 1 " +
"AND t.field_3 IN ?2 " +
"AND t.jsonb_field #>> '{key,subkey}' = ?3",
nativeQuery = true)
List<Entity> getEntities(String field1Value,
Collection<Integer> field3Values,
String jsonbFieldValue);
Run Code Online (Sandbox Code Playgroud)
但是日志显示了这个:
SELECT t.* FROM my_table t
WHERE t.field_1 = ?1
AND t.field_2 = 1
AND t.field_3 IN ?2
AND t.jsonb_field ? '{key,subkey}' = ?3
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
内部异常:org.postgresql.util.PSQLException:没有为参数2指定值.
我在方法调用之前直接记录了参数,并且它们都是提供的.
我不确定为什么在日志中#>>显示?.我需要逃脱 …
假设我有一个看起来像这样的数据库表:
CREATE TABLE myTable(
id BIGINT,
date TIMESTAMP,
user_ids JSONB
);
Run Code Online (Sandbox Code Playgroud)
user_ids 区域 JSONB-ARRAY
让这个表的记录看起来像这样:
{
"id":13,
"date":"2019-01-25 11:03:57",
"user_ids":[25, 661, 88]
};
Run Code Online (Sandbox Code Playgroud)
我需要查询 user_ids 包含 25 的所有记录。在 SQL 中,我可以使用以下选择语句来实现它:
SELECT * FROM myTable where user_ids::jsonb @> '[25]'::jsonb;
Run Code Online (Sandbox Code Playgroud)
现在我需要编写一个 JPA-Predicate 来呈现"user_ids::jsonb @> '[25]'::jsonb"一个休眠的可解析/可执行标准,然后我打算在session.createQuery()语句中使用它。简单来说,我需要知道如何将该 PSQL 代码段编写(user_ids::jsonb @> '[25]'::jsonb)为 HQL 表达式。