【发布时间】:2023-03-31 18:49:01
【问题描述】:
我想实现一个带有分页的表格组件。表中的结果由这样的多选查询检索:
SELECT DISTINCT t0.userId,
t0.userName,
t1.rolleName
FROM userTable t0
LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')
我可以通过多选查询获得此结果。
现在对于分页,我必须首先检索总行数。 有没有人可以为这个 sql 之一定义条件查询?我失败了,因为子查询不支持多选,而且我不知道如何将这个不同的内容放入 count 语句中。
SELECT COUNT(*) FROM
(
SELECT DISTINCT t0.userId,
t0.userName,
t1.rolleName
FROM userTable t0
LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')
)
或
SELECT COUNT(DISTINCT t0.userId || t0.userName || t1.rolleName)
FROM userTable t0
LEFT OUTER JOIN roleTable t1 ON t0.userId = t1.fkUser
WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')
提前致谢!
顺便说一句。我在 WebSphere AppServer 上使用 OpenJpa
【问题讨论】:
-
这不是 Criteria API 问题。我正在删除该标签。它看起来像原生 SQL,不是吗?
-
@carbontax 感谢您阅读我的问题,但如果您仔细阅读,您会发现我要求对这些原生 sql 之一进行条件查询。所以criteriaApi标签是正确的。
-
JPQL
SELECT COUNT(DISTINCT CONCAT(t0.userId, t0.userName, t1.rolleName) FROM User t0 LEFT OUTER JOIN t0.roles t1 WHERE(t0.userType = 'normalUser' AND t1.roleType = 'loginRole')怎么样? -
@ChristianBeikov 感谢您的评论。不幸的是,我只能使用标准 api,因为在我的生产性查询中有许多变量选择参数,我必须首先检查空值或默认值。
-
你的问题解决了吗?
标签: jpa java-ee-6 criteria-api