postgresql - Criteriabuilder 之类的,Long 怎么做呢?

标签 postgresql jpa

我尝试使用 Criteriabuilder 中的“like”方法获取基于模式“10%”的所有记录。

我想获取 ID 所在位置的记录 - 101、10002、1003、1000 等...

我用过这段代码:

Predicate p = cb.like(r.<String>get("ID").as(String.class), "10%")

但是我看到 postgres 无法执行这样的查询时出现异常:

SELECT ID, NAME, SOMETHING FROM TABLE WHERE ID LIKE 10%

那是 JPA (Glassfish 4.x) 生成了错误的查询。

正确的查询必须是这样的:

SELECT ID, NAME, SOMETHING FROM TABLE WHERE CAST (ID as TEXT) LIKE '10%'

如何通过 Criteria API 构建查询,我得到了 postgres 的正确查询?

更新:

我试着写一个 CAST 函数:

Expression<String> postgresqlCastFunction = cb.function("CAST", String.class, r.<String>get("ID").as(String.class));
Predicate p = cb.like(postgresqlCastFunction, "10%");

但得到这样的查询:

FROM TABLE WHERE (CAST(ID) LIKE ?)

那么,如何为这个正确的结果在函数中添加 need 表达式 -

FROM TABLE WHERE (CAST(ID as TEXT) LIKE ?) ..

最佳答案

使用 PostgreSQL native 的示例实现 TO_CHAR函数可能如下所示:

JPQL

SELECT r FROM Records r 
WHERE FUNCTION('TO_CHAR', r.ID, 'FM9999999999') LIKE :pattern

条件 API

Path<String> id = r.get("ID");
Expression<String> format = cb.literal("FM9999999999");
Expression<String> function= cb.function("TO_CHAR", String.class, id, format);
ParameterExpression<String> pattern = cb.parameter(String.class, "pattern");
Predicate like = cb.like(function, pattern);
cq.where(like);

您也可以将查询构建为一行:

cq.where(cb.like(cb.function("TO_CHAR", String.class, r.get("ID"), cb.literal("FM9999999999")), cb.parameter(String.class, "pattern")));

执行上面的查询:

Query q = em.createQuery(cq).setParameter("pattern", "10%");

关于postgresql - Criteriabuilder 之类的,Long 怎么做呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29234255/

相关文章:

c# - 我应该使用什么数据库最适合我的 GIS 应用程序?

java - 我收到此错误 org.springframework.orm.jpa.EntityManagerHolder 无法转换为 org.springframework.orm.hibernate5.SessionHolder

java - 更新查询期间条件生成器错误 : BinaryArithmeticOperation did not match expected type

hibernate - 如何使用@NotNull

java - 我认为接口(interface)不能在java中实例化

JPAEntity.save(EntityManager)反模式

c - 调试将 SIGINT 与 gdb 结合使用的程序

python - 使用 Python 从日志文件中批量加载到 PostgreSQL

PostgreSQL 不包含一些必需的头文件

java - 比较 postgres 和 db2 表