Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将select中带有subselect的SQL转换为HQL_Java_Sql_Hibernate_Orm_Hql - Fatal编程技术网

Java 将select中带有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

我有以下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 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