4

Liferay 6.1、Tomcat、MySQLを使用しています。リストポートレットのカスタムSQL文があります。custom-sqlは、groupIdの配列と結果の制限という2つのパラメーターを使用します。

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はgroupIdの文字列を引用しています(おそらく、"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$])の代わりにインクルードします(?)

于 2012-05-30T14:51:18.910 に答える