Java 将select中带有subselect的SQL转换为HQL
我有以下SQL,我在转换为HQL时遇到问题。一个NPE被抛出——我认为这与求和函数有关。另外,我想在subselect别名上排序——这可能吗 SQL(子选择): HQL(不工作)Java 将select中带有subselect的SQL转换为HQL,java,sql,hibernate,orm,hql,Java,Sql,Hibernate,Orm,Hql,我有以下SQL,我在转换为HQL时遇到问题。一个NPE被抛出——我认为这与求和函数有关。另外,我想在subselect别名上排序——这可能吗 SQL(子选择): HQL(不工作) 如果有人感兴趣,以下是工作HQL: SELECT q, (SELECT COALESCE(SUM(CASE v.voteUp WHEN true THEN 1 ELSE -1 END), 0) FROM Vote v WHERE v.question = q) AS votecount FROM Question
如果有人感兴趣,以下是工作HQL:
SELECT q,
(SELECT COALESCE(SUM(CASE v.voteUp WHEN true THEN 1 ELSE -1 END), 0)
FROM Vote v WHERE v.question = q) AS votecount
FROM Question AS q
LEFT JOIN q.author u
LEFT JOIN u.blockedUsers ub
WHERE q.dateCreated BETWEEN :week AND :now
AND u.id NOT IN (
SELECT ub.blocked FROM UserBlock AS ub WHERE ub.blocker =:loggedInUser
)
AND (u.blockedUsers IS EMPTY OR ub.blocked !=:loggedInUser)
ORDER BY col_1_0_ DESC
请注意col_1_0的顺序_
Hibernate存在一个公开的问题——它不能正确解析别名,并且由于别名在查询中被重命名,因此将抛出一个错误。因此,col_1_0_基本上是一种变通方法——它是Hibernate生成的名称。
见问题:
出于好奇:为什么要在如此复杂的hql查询中翻译一个简洁的sql查询?您能帮我做一下吗
SELECT q,
(SELECT COALESCE(SUM(IF(v.voteUp=true,1,-1)), 0)
FROM Vote v WHERE v.question = q) AS votecount
FROM Question AS q
LEFT JOIN q.author u
LEFT JOIN u.blockedUsers ub
WHERE q.dateCreated BETWEEN :week AND :now
AND u.id NOT IN (
SELECT ub.blocked FROM UserBlock AS ub WHERE ub.blocker = :loggedInUser
)
AND (u.blockedUsers IS EMPTY OR ub.blocked != :loggedInUser)
ORDER BY votecount DESC
SELECT q,
(SELECT COALESCE(SUM(CASE v.voteUp WHEN true THEN 1 ELSE -1 END), 0)
FROM Vote v WHERE v.question = q) AS votecount
FROM Question AS q
LEFT JOIN q.author u
LEFT JOIN u.blockedUsers ub
WHERE q.dateCreated BETWEEN :week AND :now
AND u.id NOT IN (
SELECT ub.blocked FROM UserBlock AS ub WHERE ub.blocker =:loggedInUser
)
AND (u.blockedUsers IS EMPTY OR ub.blocked !=:loggedInUser)
ORDER BY col_1_0_ DESC