我在Hibernate中使用Predicates编写了一个查询,我需要在连接表上添加一个子查询来计算连接数和顺序,以及它们在一组id中存在的连接数。
连接表是ManyToMany关系。
我正在使用flyway来设置表模式,所以当数据库中存在连接表时,Hibernate中不需要连接模型来连接2个相关模型,因此不存在连接模型。
我不关心检索这些相关的模型,我只想要连接的数量,以便我可以通过它们订购。
以下是PostGreSQL,它有效。我需要将以下PSQL转换为基于谓词的查询:
SELECT u.*, COUNT(jui.interest_id) AS juiCount
FROM "user" u
LEFT JOIN (
SELECT ui.user_id, ui.interest_id
FROM user_interest ui
WHERE ui.interest_id IN (?)
) AS jui ON u.id = jui.user_id
GROUP BY u.id
ORDER BY juiCount DESC
将为IN条件提供的id传递到子查询中。上面的查询是在PostGreSQL中。
使用到目前为止的工作:
CriteriaBuilder b = em.getCriteriaBuilder();
CriteriaQuery<User> q = b.createQuery(User.class);
Root<User> u = q.from(User.class);
// This doesn't make sense because this is not a join table
// Subquery<Interest> sq = q.subquery(Interest.class)
// Root<Interest> squi = sq.from(Interest.class);
// sq.select(squi);
// sq.where(b.in("interest_id", new LiteralExpression<Long[]>((CriteriaBuilderImpl) b, interestIds)));
q.orderBy(
// b.desc(b.tuple(u, b.count(squi))),
b.asc(u.get(User_.id))
);
q.where(p);
return em
.createQuery(q)
.getResultList();
我设法找到的所有内容似乎都不合适,因为他们在他们的示例中没有使用ManyToMany来使用q.subquery()。
任何人都可以帮忙填写空白吗?