2011-01-30 4 views
0

У меня есть простой класс, называемый Person следующим образом:Нужна помощь с HQL запрос

public class Person { 
    private Integer id; 
    private String name; 
    private List<PersonState> states; 
    ... 
} 

И каждый PersonState определяется как:

public class PersonState { 
    private Integer id; 
    private State state; 
    private Date date; 
    ... 
} 

И государства является простой класс, содержащий только id и имя, и у меня есть все файлы сопоставления настроены и работают.

Я хочу, чтобы те Лица которых последний PersonState (на основе его дата) имеет государство с идентификатором = 5 (к примеру), так что будет являться HQL запрос как? Спасибо!

ответ

1

Что-то вроде этого:

SELECT p FROM Person p JOIN p.states ps1 
WHERE 
    ps1.date = (SELECT MAX(ps2.date) FROM PersonState ps2 WHERE ps2 MEMBER OF p.states) 
    AND ps1.state.id = ? 
+0

Да! Это то, что я имел в виду! –

Смежные вопросы