fetchType приписывают средства управления, выбирается ли аннотируемое поле сразу, когда основной объект выбирается. Это не обязательно диктует, как оператор выборки создается, фактическая sql реализация зависит от поставщика, Вы используете toplink/hibernate и т.д.
, Если Вы устанавливаете fetchType=EAGER
, Это означает, что аннотируемое поле заполняется с его значениями в то же время, что и другие поля в объекте. Таким образом, если Вы открываетесь, entitymanager получают Ваши объекты человека и затем закрывают entitymanager, впоследствии делание person.address не приведет к ленивому выданному исключению загрузки.
, Если Вы устанавливаете fetchType=LAZY
, поле только заполняется, когда к нему получают доступ. При закрытии entitymanager к тому времени, ленивое исключение загрузки будет выдано, если Вы сделаете person.address. Для загрузки поля, необходимо отложить объект в entitymangers контекст с em.merge (), затем сделать доступ к полю и затем закрыть entitymanager.
Вы могли бы хотеть ленивую загрузку при построении клиентского класса с набором для потребительских заказов. При получении каждого порядка на клиента, когда Вы хотели получить список клиентов, это может быть дорогой операцией базы данных когда Вы только ищущий имя клиента и контактную информацию. Лучше всего оставить доступ дб до позже.
Для второй части вопроса - как добраться, в спящем режиме для генерации оптимизированного SQL?
В спящем режиме, должен позволить Вам обеспечивать подсказки относительно того, как создать самый эффективный запрос, но я подозреваю, что существует что-то не так с Вашей конструкцией таблицы. Отношения устанавливаются в таблицах? Будьте в спящем режиме, возможно, решил, что простой запрос будет более быстрым, чем соединение особенно, если индексы и т.д. будут отсутствовать.
Мой любимый способ - выбрать свой блок кода (обычно в стандартном строковом режиме [V]), а затем нажать> или <.
Если вы хотите перейти на вкладку более одного раза, 2 > или 3>, чтобы повторить его.
Если у вас недостаточно вкладок (или слишком много вкладок), введите «gv», чтобы повторно выбрать свой выбор, и повторите попытку.
Чтобы переместить блок кода, выберите его с помощью [V] выберите режим обычной линии, а затем нажмите «d». Это операция «Вырезать».
Затем переместите курсор в то место, где вы хотите, чтобы он переместился, и нажмите «p». Это операция «Вставить».
Вы также можете попробовать автоматическое табуляцию блока кода, выбрав его в режиме постоянной строки [V] и нажав «=».
Страница « Исходный код с отступом » должна предоставить вам всю необходимую информацию.
Чтобы сделать отступ для внутреннего блока, содержащего курсор, выполните: > iB
Чтобы сделать отступ для внутреннего блока, включая закрывающие фигурные скобки, выполните: > aB
Вы можете заменить '>' на '<' для отступа влево.
Для автоматического отступа нажмите == (или =, если у вас есть выделенный текст).
В командном режиме:
>
Как и к любой другой команде, вы можете добавить номер строки, в которой вы хотите, чтобы она применялась:
2 + 2 + >
Будет "вкладка" 22 строки.
Нажмите . если вы хотите "перенастроить вкладку"
I use a handy remap for visual mode that allows indenting the text multiple times while keeping your text selected. Similar to how some IDEs lets you select and hit tab (or shift-tab) to indent.
Add the following to your .vimrc
" Pressing < or > will let you indent/unident selected lines
vnoremap < <gv
vnoremap > >gv
Also you can use == to have vim try and determine the correct indenting automatically. It will work on any line buy just placing the cursor there and pressing == or you can do fancy stuff like select the entire file and press == to fix all the indenting (works wonders on html generated by wysiwyg editors).