2009-09-09 4 views
1

Есть ли конфигурация Hibernate (надеюсь, это аннотация по сопоставленному классу поле @Column), который позволит мне сортировать коллекцию объектов, связанных с загруженным объектом, с помощью данного столбца этого объекта во время сеанса. load (Entity.class, Id) вызывается?Конфигурация столбца сортировки сущностей Hibernate

Например, если у меня был EntityA, содержащий ассоциацию OneToMany с EntityB.

@Entity 
public class EntityA { 
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
    private Set<EntityB> headlines = new TreeSet<Entity>(); 

} 

Я хочу, чтобы EntityB сортировался в наборе, который возвращается из спящего режима.

ответ

8

session.load() загружает экземпляр единственного объекта. Нет сортировки.

Update (основано на вопрос редактирования):

@OrderBy("column_name") могут быть использованы для сортировки элементов коллекции внутри объекта по данной колонке; однако, что имеет смысл только для коллекций, которые поддерживают их порядок (например, список, не указан):

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@OrderBy("name") 
private List<EntityB> headlines = new ArrayList<Entity>(); 
+0

Я использовал SortedSet и использовал аннотацию @Sort (а кто-то на StackOverflow подумал, что это плохой ответ, ни малейшего представления, почему?) – Dougnukem

+1

@Dougnukem я понимаю это старая должность, но здесь надеется, что это поможет кому-то еще: '@ Sort' - это« плохая »идея, потому что заказ происходит s на сервере приложений. С помощью '@ OrderBy' список сортируется на сервере базы данных. Как правило, рекомендуется сортировать дескриптор базы данных, потому что это одна из его сильных сторон. – egallardo

0

Нет, вы можете выбрать заказ только на уровне коллекции (@OrderBy) или HQL или через в критерии API.

1

Session.load не загружает список, а всего лишь один объект.

Вы можете отсортировать список объектов при их извлечения из базы данных с помощью метода addOrder() по критериям.

Если у вас есть родительский класс со списком детей, вы можете заказать ребенок с @OrderBy аннотации (см Hibernate Annotations - Collections

1

Я использовал @Sort и коллекцию SortedSet на карту своей ассоциации, которая требуется, чтобы мой Entity реализовать Сопоставимые интерфейс (интермедиат CompareTo (T) метод).

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@Sort(type=SortType.NATURAL)  
private SortedSet<Entity> headlines = new TreeSet<Entity>(); 
+0

любая причина, почему это плохое решение? – Dougnukem

+0

Если 'headlines' создается в памяти, это не плохое решение. Каждый сценарий отличается, но, в общем, если он загружен из базы данных, вы хотите, чтобы база данных делала сортировку для вас по соображениям производительности. – egallardo

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