gpt4 book ai didi

使用 IN 运算符的 Liferay 自定义 SQL

转载 作者:行者123 更新时间:2023-12-02 15:35:37 25 4
gpt4 key购买 nike

我正在使用 Liferay 6.1、Tomcat 和 MySQL。我有一个列表 portlet 的自定义 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 是有效的运算符吗?如果没有,如何在不同组内搜索?

最佳答案

也许 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$]) 代替 (?)

关于使用 IN 运算符的 Liferay 自定义 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com