Ваш код верный, вы попробовали это, он будет работать. Одна из проблем заключается в том, что вы используете list
, так что, хотя у вас есть этот список в кеше, вероятно, не будет сортироваться, но если вы очистите текущий сеанс и извлечете его снова, он будет упорядочен, когда вы установите @OrderBy(value="orderField")
.
Также существует другая проблема с @OrderBy
относительно спящего режима documentation;
Lists can be mapped in two different ways:
- as ordered lists, where the order is not materialized in the database
- as indexed lists, where the order is materialized in the database
To order lists in memory, add @javax.persistence.OrderBy to your property.
Но я просто попытался вашу проблему и запрос на базе данных имеет порядок по параметру (hibernate.show_sql=true
), так что я не уверен, что они имели в виду с верхним утверждением.
Мой пример запроса;
select ... from ... inner join ... where users0_.event_id=? order by user1_.fullname
Я закончу, если заказ сделан на базе данных, то вы можете смело использовать @OrderBy аннотацию.
ОБНОВЛЕНИЕ:
@OrderBy
должны иметь родное значение SQL, например;
@OrderBy(value="orderField")
private List<TABLE_B> BList;
где orderField
это имя базы данных столбца в таблице TABLE_B
, также можно сделать это @OrderBy(value="lower(fullname) desc")
Если вы хотите создать столбец присоединиться TABLE_A_B который держит такой же порядок, как в вашем списке в java, тогда вы должны использовать @OrderColumn(name="orderField")
Попробуйте это;
@ManyToMany
@JoinTable(name="TABLE_A_B", joinColumns={@JoinColumn(name="ID_A")}, inverseJoinColumns={@JoinColumn(name="ID_B")})
@OrderColumn(name="orderField")
private List<TABLE_B> BList;
спасибо за ваш ответ, но пример, который я опубликовал, не работает. У меня ошибка времени выполнения: 'Caused by: org.postgresql.util.PSQLException: ОШИБКА: столбец B1_.orderField не существует Позиция: 1437' –
Посмотрите на обновление. –
Я хочу знать, можно ли использовать поле таблицы соединений, чтобы заказать значения. Я обновил свой вопрос. –