2013-11-20 9 views
0

я пытаюсь сделать namedQuery:NamedQuery выберите первый в списке

@NamedQuery(name = "Interval.findByMemoryType", 
    query = "select i from Interval i JOIN i.intervalDatas id " 
    + "where id.fragments.memoryType = :memoryType") 

Моя проблема в том, что фрагменты список фрагмента. Меня интересует только тип памяти первого элемента в списке.

Так что я должен что-то вроде этого:

@NamedQuery(name = "Interval.findByMemoryType", 
    query = "select i from Interval i JOIN i.intervalDatas id " 
    + "(select first(id.fragments)) as fid) where fid.memoryType = :memoryType") 

Но я всегда «Запрос содержит некорректное окончание» проблему.

Может ли кто-нибудь мне помочь?

+0

Нет функции «первой» JPA, о которой я знаю, и назначение подзапроса должно проходить в части выбора запроса, а не в соединении. Поскольку соединение не является детерминированным, я не знаю, какое значение имеет проверка только первого фрагмента в списке фрагментов. Разве вам не нужен какой-либо интервал, который ссылается на фрагмент с определенным типом памяти? – Chris

ответ

0

Вы можете взять первый результат:

TypedQuery<Interval> q = em.createQuery ("Interval.findByMemoryType", Interval.class); 
q.setParameter("memoryType", memoryType);//+other parameters if you have 
Interval interval = q.getSingleResult(); 

Небольшой недостаток заключается в том, что он может загрузить все свои intervalDatas (в зависимости от отображения). Также проверьте the documentation на наличие возможных исключений.

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