В соответствии с вашим примером вам нужно отсортировать по двум полям (фамилия, имя), а не по одному. Вы можете использовать библиотеку Alasql , чтобы сделать этот вид в одной строке:
var res = alasql('SELECT * FROM ? ORDER BY last_nom, first_nom',[objs]);
Попробуйте этот пример в jsFiddle .
fetchType приписывают средства управления, выбирается ли аннотируемое поле сразу, когда основной объект выбирается. Это не обязательно диктует, как оператор выборки создается, фактическая sql реализация зависит от поставщика, Вы используете toplink/hibernate и т.д.
, Если Вы устанавливаете fetchType=EAGER
, Это означает, что аннотируемое поле заполняется с его значениями в то же время, что и другие поля в объекте. Таким образом, если Вы открываетесь, entitymanager получают Ваши объекты человека и затем закрывают entitymanager, впоследствии делание person.address не приведет к ленивому выданному исключению загрузки.
, Если Вы устанавливаете fetchType=LAZY
, поле только заполняется, когда к нему получают доступ. При закрытии entitymanager к тому времени, ленивое исключение загрузки будет выдано, если Вы сделаете person.address. Для загрузки поля, необходимо отложить объект в entitymangers контекст с em.merge (), затем сделать доступ к полю и затем закрыть entitymanager.
Вы могли бы хотеть ленивую загрузку при построении клиентского класса с набором для потребительских заказов. При получении каждого порядка на клиента, когда Вы хотели получить список клиентов, это может быть дорогой операцией базы данных когда Вы только ищущий имя клиента и контактную информацию. Лучше всего оставить доступ дб до позже.
Для второй части вопроса - как добраться, в спящем режиме для генерации оптимизированного SQL?
В спящем режиме, должен позволить Вам обеспечивать подсказки относительно того, как создать самый эффективный запрос, но я подозреваю, что существует что-то не так с Вашей конструкцией таблицы. Отношения устанавливаются в таблицах? Будьте в спящем режиме, возможно, решил, что простой запрос будет более быстрым, чем соединение особенно, если индексы и т.д. будут отсутствовать.
Две вещи происходят со мной.
Первый, действительно ли Вы уверены, что имеете в виду ManyToOne для адреса? Это означает, что у нескольких человек будет тот же адрес. Если это будет отредактировано для одного из них, это будет отредактировано для всех них. То Ваше намерение? 99% адресов времени являются "частными" (в том смысле, что они принадлежат только одному человеку).
, Во-вторых, у Вас есть какие-либо другие нетерпеливые отношения на объекте Человека? Если я вспоминаю правильно, В спящем режиме, может только обработать нетерпеливые отношения на объекте, но это - возможно устаревшая информация.
я говорю что, потому что Ваше понимание того, как это должно работать, чрезвычайно корректно от того, где я сижу.
"mxc" is right. fetchType
just specifies when the relation should be resolved.
To optimize eager loading by using an outer join you have to add
@Fetch(FetchMode.JOIN)
to your field. This is a hibernate specific annotation.
Если вы используете EclipseLink вместо Hibernate, вы можете оптимизировать свои запросы с помощью «подсказок запросов». См. Эту статью в Eclipse Wiki: EclipseLink / Примеры / JPA / QueryOptimization .
Есть глава о «Совместном чтении».