Как упорядочить по индексу списка в HQL-запросе? - PullRequest
1 голос
/ 07 июня 2010

У меня такая ситуация:
У меня есть две сущности с отношением один-ко-многим, отображаемым так (даны только соответствующие части):

    <class name="xyz.Survey">
        <list name="answers" inverse="true" lazy="true" fetch="select" 
cascade="all-delete-orphan">
            <key column="OPA_OP_ID" not-null="true" />
            <list-index column="OPA_SORT_ORDER" />
            <one-to-many class="xyz.Answer" />
        </list>
    </class>
    <class name="xyz.Answer">
        <many-to-one name="survey" class="xyz.Survey" fetch="select">
            <column name="OPA_OP_ID" not-null="true" />
        </many-to-one>
there is no mapping for column OPA_SORT_ORDER, I let Hibernate take care of that
    </class>

Мой вопрос:выполнить HQL-запрос для ответов для одного опроса, и я хочу, чтобы эти ответы были отсортированы по OPA_SORT_ORDER.Этот запрос не работает так:

select new AnswerDTO(a.id, a.answerText, 0) 
from Survey p 
join p.answers a
where p.id = ? 

В журнале я вижу, что в запросе SQL, сгенерированном этим HQL, нет ORDER BY.Как я могу это сделать?Нужно ли добавлять sortOrder свойство к объекту ответа?

1 Ответ

5 голосов
/ 07 июня 2010

Нет, вам не нужно добавлять свойство, HQL имеет встроенную функцию index для этого:

select new AnswerDTO(a.id, a.answerText, 0) 
from Survey p 
join p.answers a
where p.id = ? 
order by index(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...