2016-04-28 179 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