JPA + Hibernate + Named Query + как присоединиться к результату подзапроса - PullRequest
0 голосов
/ 04 марта 2010

Кто-нибудь может мне помочь преобразовать следующий собственный запрос в именованный запрос?

Собственный запрос:

SELECT 
      usr1.user_id, urr1.role_id, usr2.user_id, urr2.role_id, usr1.school_id, 
      term.term_name, count(material.material_id) as "Total Book Count", 
      fpc.FOLLETT_PENDING_COUNT as "Follett Pending Count", 
      rrc.RESOLUTION_REQUIRED_COUNT as "Resolution Required Count" 
FROM  va_school sch 

JOIN va_user_school_rel usr1 on sch.school_id=usr1.school_id  
JOIN va_user_role_rel urr1 on usr1.user_id=urr1.user_id and urr1.role_id=1001 
JOIN va_user_school_rel usr2 on sch.school_id=usr2.school_id 
JOIN va_user_role_rel urr2 on usr2.user_id=urr2.user_id and urr2.role_id=1002 
JOIN va_term term on term.school_id = usr1.school_id 
JOIN va_class course on course.term_id = term.term_id 
JOIN va_material material on material.class_id = course.class_id

LEFT JOIN 
      (SELECT VA_CLASS.TERM_ID as "TERM_ID", COUNT(*) as "FOLLETT_PENDING_COUNT" 
       FROM VA_CLASS JOIN VA_MATERIAL ON VA_MATERIAL.CLASS_ID = VA_CLASS.CLASS_ID 
       WHERE VA_CLASS.reference_flag = 'A' AND trunc(VA_MATERIAL.FOLLETT_STATUS) = 0 
       GROUP BY VA_CLASS.TERM_ID) fpc on term.term_id = fpc.term_id 

LEFT JOIN 
      (SELECT VA_CLASS.TERM_ID as "TERM_ID", COUNT(*) as "RESOLUTION_REQUIRED_COUNT" 
       FROM VA_CLASS JOIN VA_MATERIAL ON VA_MATERIAL.CLASS_ID = VA_CLASS.CLASS_ID 
       WHERE VA_CLASS.reference_flag = 'A' AND trunc(VA_MATERIAL.FOLLETT_STATUS) = 1 
       GROUP BY VA_CLASS.TERM_ID) rrc on term.term_id = rrc.term_id 
WHERE course.reference_flag = 'A' 
GROUP BY usr1.user_id, urr1.role_id, usr2.user_id, urr2.role_id, usr1.school_id, term.term_name, fpc.FOLLETT_PENDING_COUNT, rrc.RESOLUTION_REQUIRED_COUNT 
ORDER BY usr1.school_id, term.term_name;

Заранее спасибо.

  • Шрири

Ответы [ 2 ]

0 голосов
/ 05 марта 2010

В зависимости от модели вашего объекта Модель вы должны подумать о цели вашего запроса. Глядя на ваш SQL-оператор, это семантически проблема, если нужно сформулировать HQL-запрос.

Тем не менее, возможно - и обычно - создавать запросы в тета-стиле даже в виде именованных запросов в приложениях на основе Hibernate.

HQL-запрос в большинстве случаев выглядит так же, как и нативный, за исключением того, что он использует отношения объектной модели. Эти отношения имеют большое влияние на способ, запрос может быть определен. Вместо того, чтобы начинать с School сущности. Они могут начинаться с User наборов данных.

SELECT ....
FROM User user1, User user2
JOIN User.school as school
...
WHERE school = user2.school

Действительно легче следовать to one отношениям, поэтому я обычно переделываю свои запросы таким образом, чтобы они имели тенденцию выполнять их таким образом.

0 голосов
/ 05 марта 2010

Я бы предложил переместить это в хранимую процедуру и вызвать хранимую процедуру из JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...