我正在使用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(),它就可以工作。
是否是有效的运营商?如果没有,如何在不同的群体中进行搜索?
答案 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$])
代替(?)