2016-04-28 127 views
1

如何queryDslLIKE和CONCAT在QueryDsl

SELECT a.id, 
(SELECT count(*) FROM ancestors_table t where t.ancestors LIKE CONCAT('%,',a.id,',%')) 
    FROM ancestors_table a; 

我與LIKE CONCAT('%,',a.id,',%')部分掙扎編寫這個查詢。

的解

where(t.ancestors.like(
       Expressions.stringTemplate("'%,'") 
       .concat(Expressions.stringTemplate("{0}" , a.id)) 
       .concat(Expressions.stringTemplate("',%'")) 
)) 

回答

0

不能完全確定,但這樣的事情:

where(t.ancestors.like(Expressions.asString("%").concat(a.id).concat("%"))) 

如果a.id是一個數字,那麼你需要將其轉換成字符串:

where(t.ancestors.like(Expressions.asString("%").concat(a.id.stringValue()).concat("%"))) 
+0

嗨,我得到了'方法concat(表達式)在StringExpression類型中不適用於參數(NumberPath )' – Youssef

+0

@Youssef:well'concat()'對數字沒有意義。 「LIKE」對數字也沒有意義。不在QueryDSL中,不在SQL中。你可能需要一些演員。你不可能在'ancestor'列中存儲逗號分隔的值列表嗎?這是一個非常糟糕的數據庫設計。 –

+0

是的我在做:D但爲什麼它是一個糟糕的設計..我怎麼能做一個分層的查詢,返回給定的ID或將返回給定的ID的所有祖先的查詢的所有後代? – Youssef