使用QueryDSL调用Postgres函数

时间:2015-04-26 23:48:09

标签: postgresql querydsl

我的Postgres DB上安装了一个包含相似功能的包。我在JDBC上使用纯SQL调用它们,它按预期工作。

现在我正在尝试重构我的代码以使用QueryDSL。相似性函数的第一步设置为0到1之间的限制,以便仅返回高于给定阈值的结果。我正在尝试这种方式:

NumberExpression<Float> sim = Expressions.numberTemplate(Float.class, "set_limit({0})", "0.2"); query.singleResult(sim);

我收到以下错误: java.lang.IllegalArgumentException: No joins given

我知道我没有通过EntityPath。如果我尝试使用任何EntityPath,我会收到错误:

`[[IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'set_limit' {originalText=set_limit}
    \-[EXPR_LIST] SqlNode: 'exprList'
       \-[NAMED_PARAM] ParameterNode: '?' {name=1, expectedType=null}
]]`

之后,我会调用另一个DB函数,但我猜解决方案是一样的。

这是否可以使用QueryDSL?

1 个答案:

答案 0 :(得分:0)

set_limit无效的JPQL,这就是Hibernate抛出异常的原因。 Querydsl JPA内部映射到JPQL,Querydsl SQL映射到SQL。

如果您需要SQL表达性,就像在这种情况下一样,您将需要使用Querydsl SQL。