2017-02-07 4 views
1

Я хотел бы отсортировать поле OneToMany с аннотацией @OrderBy с несколькими столбцами и указать порядок сортировки для каждого, но я не могу найти в любом месте, независимо от того, как это сделать или если это невозможно. Спецификации для аннотирования говорит:JPA/Hibernate @OrderBy аннотация с несколькими столбцами и ASC/DESC для каждого

orderby_list::= orderby_item [,orderby_item]* 
orderby_item::= property_or_field_name [ASC | DESC] 

так я думаю, это не возможно, но я предпочитаю, чтобы спросить в любом случае.

Собираем следующие бросает HibernateException на развертывание:

@OrderBy("field1 DESC, field2 DESC, field3 DESC, field4 DESC") 

Генерация:

Caused by: org.hibernate.HibernateException: Unable to parse order-by fragment 

Благодаря

+0

являются «column1», «COLUMN2» и т.д. столбцы? или ПОЛЯМИ? –

+0

К сожалению, имена полей – Sandy

+0

ОК, поэтому у вашего провайдера JPA есть проблема, основанная на информации, представленной здесь, и вы должны поднять вопрос о них –

ответ

4

Если у вас есть класс Person с 2 полями, firstName и lastName затем с запрос вы можете сделать

SELECT p FROM Person p ORDER BY p.firstName ASC, p.lastName DESC 

Это то, что говорит JPN BNF.

С точки зрения, когда у вас есть список Person объектов, вы можете определить порядок списка, как этот (тот же синтаксис)

@OneToMany 
@OrderBy("firstName ASC, lastName DESC") 
List<Person> myList; 
+0

Спасибо, но я не говорю о запросе, а конкретно об аннотации. Я хочу, чтобы коллекция в OneToMany была отсортирована, когда она была извлечена. – Sandy

+0

обновлен. точный синтаксис применяется –

+0

Я пробовал это, и у меня возникает ошибка синтаксического анализа при развертывании приложения: «org.hibernate.HibernateException: невозможно разобрать фрагмент заказа». Я обновлю свой пост. – Sandy