Liferay custom-sql使用IN运算符

时间:2012-05-30 12:50:09

标签: liferay

我正在使用Liferay 6.1,Tomcat和MySQL。我有一个list-sql句子用于列表portlet。 custom-sql使用两个参数:groupIds数组和结果限制。

SELECT
count(articleId) as count,
...
FROM comments
WHERE groupId IN (?)
GROUP BY articleId
ORDER BY count DESC 
LIMIT 0, ?

我的FinderImpl类有这个方法:

 public List<Comment> findByMostCommented(String groupIds, long maxItems) {

    Session session = null;
    session = openSession();

    String sql = CustomSQLUtil.get(FIND_MOST_COMMENTS);

    SQLQuery query = session.createSQLQuery(sql);
    query.addEntity("Comment", CommentImpl.class);

    QueryPos queryPos = QueryPos.getInstance(query);
    queryPos.add(groupIds);
    queryPos.add(maxItems);

    List<Comment> queryResult = query.list();

    return queryResult;
}

返回0结果。如果我删除WHERE IN(),它就可以工作。

是否是有效的运营商?如果没有,如何在不同的群体中进行搜索?

1 个答案:

答案 0 :(得分:10)

也许hibernate引用了你的groupIds字符串(可能是"1,2,3,4"的形式,当hibernate将它转换为sql时,它会为你添加引号?

你可能想尝试这样的事情(来自Liferay本身):

String sql = CustomSQLUtil.get(FIND_BY_C_C);

sql = StringUtil.replace(sql, "[$GROUP_IDS$]", groupIds);

并在{SQL

中包含([$GROUP_IDS$])代替(?)