2015-04-26 66 views
1

我在Postgres數據庫上安裝了一個包含相似函數的包。我在JDBC上使用純SQL調用它們,並且它按預期工作。使用QueryDSL調用Postgres函數

現在我試圖重構我的代碼來使用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} 
]]` 

在那之後,我會打電話給另一個數據庫的功能,但我想解決辦法是一樣的。

QueryDSL有可能嗎?

回答

0

set_limit是無效的JPQL,這就是爲什麼Hibernate拋出異常。 Querydsl JPA將內部映射到JPQL,並將Querydsl SQL映射到SQL。

如果您需要SQL表現力,就像在這種情況下一樣,您將需要使用Querydsl SQL。