Элемент order-by элемента Hibernate SET - PullRequest
1 голос
/ 05 сентября 2011

Мне было интересно, я могу примириться с тем фактом, что вы можете установить атрибут order-by для элемента SET в файле сопоставлений, когда fetch = select, но если вы извлекаете все в то время, когда вы создаете запрос. Будет ли это безопасно?

Я имею в виду, они закачивают результаты в HashSet, разве я не думал, что они не могут гарантировать порядок элементов?

1 Ответ

4 голосов
/ 05 сентября 2011

Hibernate на самом деле не перекачивает результаты в HashSet, он заменит все существующие HashSet собственной реализацией Set.

Когда вы сделаете экземпляр постоянным,вызывая persist (), Hibernate фактически заменит HashSet экземпляром собственной реализации Set в Hibernate.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html

Если вы используете атрибут order-by, то он выиграетне используйте HashSet, вероятно, вместо него будет использоваться LinkedHashSet.Обращайтесь к этому, из того же документа, который я цитировал выше:

Если вы хотите, чтобы сама база данных упорядочивала элементы коллекции, используйте атрибут order-by отображений set, bag или map.Это решение реализовано с использованием LinkedHashSet или LinkedHashMap и выполняет упорядочение в запросе SQL, а не в памяти.

Так что Hibernate будет безопасно поддерживать порядок элементов в Set - но будьте осторожны, когдаВы создаете новые объекты и сохраняете их.Если вы используете HashSet вместо LinkedHashSet в новом объекте, то Hibernate сохранит ваш набор в случайном порядке, потому что HashSet не гарантирует порядок элементов.

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