4

我正在使用 Liferay 6.1、Tomcat 和 MySQL。我有一个用于列表 portlet 的 custom-sql 语句。custom-sql 使用两个参数:groupId 数组和结果限制。

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(),它会起作用。

IN 是一个有效的运算符吗?如果没有,如何在不同的组内搜索?

4

1 回答 1

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);

并包含([$GROUP_IDS$])(?)你的 SQL 中

于 2012-05-30T14:51:18.910 回答