Hibernate: сортировка списка без «касания» базы данных - PullRequest
4 голосов
/ 11 октября 2010

У меня есть отношение «многие ко многим» в моей базе данных, и я использую Hibernate, чтобы извлечь одну строку из левой части отношения.Затем я просто вызываю метод получения, чтобы получить связанную правую часть отношения (ленивая выборка).

Как часть моей работы, мне нужно отсортировать «список» правого объекта, выполнив это:

Collections.sort(list);

Когда я закончу свою работу, я в данный момент:

session.getTransaction().commitTransaction();

Несмотря на то, что я фактически ничего не изменил в базе данных с точки зрения данных, в журналах я вижу, что некоторые операторы INSERT были вызваны.

Что мне делать в этой ситуации, чтобы я мог упорядочить список без попадания в базу данных?

1 Ответ

7 голосов
/ 11 октября 2010

Существует несколько способов сделать это.

Сначала , вы можете использовать аннотацию @OrderBy в определении вашей коллекции.См. ссылку здесь.Таким образом, Hibernate добавит запрос с предложением order by.

Second , если вы используете Criteria API для запроса к БД, вы можете использовать метод addOrder() длядобавьте предложение order by.

Третье , вы можете напрямую использовать предложение order by в своем HQL.

Четвертое , вы можете сделатьэто в вашем коде, используя Comparator .Вы можете сделать это даже после закрытия сессии / транзакции.В этом случае вам не нужна активная транзакция;но это может означать сортировку частичных данных, потому что большую часть времени мы не получаем полную информацию - по соображениям производительности.В вашем случае, кажется, что-то изменилось посреди.Однако попробуйте отсортировать его после закрытия транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...