我尝试使用 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 查询?
Updated:
我尝试编写一个 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 ?)
,那么,如何在函数中添加需要表达式以获得正确的结果 -
从表中 (CAST(IDas TEXT) 喜欢 ?) ..