0

问题:hql 查询的 IN 子句仅匹配逗号分隔列表的第一项!

HQL 查询是这样的:from News where 93 IN (pictureIds)

新闻实体是:

public class News {
  String id;
  String pictureIds; // comma separated list of pictureIds
}

注意:如果我更改 HQL 查询并对 pictureIds 进行硬编码,其结果是正确的!

如何更改查询以解决问题?

4

3 回答 3

1

尝试这个:

from News where pictureIds LIKE '%,93,%'

逗号添加到开头和结尾。

于 2013-08-20T03:58:52.250 回答
0

这会做。

Query query = getSession().createQuery("Select * from News where pictureIds In (:List)")  
             .setParameterList("List",ListValues);

在这里查看HQL 使用的基础知识。

于 2013-08-20T09:20:00.863 回答
0

我已经让它工作了,但它相当乏味:

results?.eachWithIndex { output, i->
                    if (i>0) {
                        sb.append(" or ")
                    }
                    sb.append(" ((dbres.Field like (:myVariablesA${i})) or (dbres.Field like (:myVariablesB${i})) or (dbres.Field like (:myVariablesC${i})) or dbres.Field=:myVariable${i})")
                    //capture within csv so aa,val,bb
                    myParams."myVariablesA${i}"='%,'+output+',%'
                    //capture as last element: aa,val
                    myParams."myVariablesB${i}"='%,'+output
                    //capture it as first element val,aa
                    myParams."myVariablesC${i}"=output+',%'
                    //finally capture it if its not a csv and its a physical set value
                    myParams."myVariable${i}"=output
                }

这是 groovy 并附加到 StringBuilder (sb) 元素。简而言之,csv 字符串字段本身的 %,id,% 太强了。通过在之前添加所有变体逗号,然后单独捕获实际字符串中可能存在的所有变体

希望它可以帮助别人

于 2016-04-01T10:40:29.253 回答