我要查询以下PSQL脚本,但使用标准生成器:
PostgreSQL数据库
SELECT ts.domain, ts."data" -> 'id' as id FROM myScheme.myServiceTable ts;
到目前为止,我已经尝试过使用条件,但它总是抛出一个恼人的错误消息
标准生成器代码
public final CriteriaQuery<Object[]> getServiceInfo() {
final CriteriaBuilder builder = entityManager.getCriteriaBuilder();
final CriteriaQuery<Object[]> criteria = builder.createQuery(Object[].class);
final Root<ServiceTable> rootBooking = criteria.from(ServiceTable.class);
criteria.multiselect(
builder.function("jsonb_extract_path_text",
String.class,
rootBooking.get("data"),
builder.literal("id")
).alias("id"),
rootBooking.get("domain")
);
}
错误消息:
org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode \r\n \\-[METHOD_CALL] MethodNode: 'function (jsonb_extract_path_text)'\r\n +-[METHOD_NAME] IdentNode: 'jsonb_extract_path_text' {originalText=jsonb_extract_path_text}\r\n \\-[EXPR_LIST] SqlNode: 'exprList'\r\n
如果有人知道我如何查询我之前提到的,我将不胜感激。
1条答案
按热度按时间fkaflof61#
如果要在select子句中使用Hibernate未知的函数,则必须转换表达式:
在Hibernate 6中,这是不必要的了。如果你不想强制转换,那么在
Dialect
中将函数注册为SQLFunction
。