我的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?
答案 0 :(得分:0)
set_limit
无效的JPQL,这就是Hibernate抛出异常的原因。 Querydsl JPA内部映射到JPQL,Querydsl SQL映射到SQL。
如果您需要SQL表达性,就像在这种情况下一样,您将需要使用Querydsl SQL。