Преобразование SQL с подвыбором в выборе к HQL

У меня есть следующий SQL, который у меня есть проблемы при преобразовании в HQL. NPE становится брошенным - который я думаю, имеет некоторое отношение к функции СУММЫ. Кроме того, я хотел бы отсортировать на подызбранном псевдониме - действительно ли это возможно?

SQL (подвыбор):

SELECT q.title, q.author_id, 
    (SELECT IFNULL(SUM(IF(vote_up=true,1,-1)), 0) 
    FROM vote WHERE question_id = q.id) AS votecount
FROM question q ORDER BY votecount DESC

HQL (не работающий)

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
7
задан Pascal Thivent 30 April 2010 в 18:31
поделиться

1 ответ

Вот рабочий 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

Обратите внимание на ORDER BY col_1_0_

Есть открытая проблема с Hibernate - он не правильно разбирает псевдонимы, а так как псевдонимы переименовываются в запросе, возникает ошибка. Поэтому col_1_0_ является обходным решением - это имя, которое генерирует Hibernate. См. выпуск: http://opensource.atlassian.com/projects/hibernate/browse/HHH-892

11
ответ дан 6 December 2019 в 23:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: