Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate почему не работает LAZY? / 9 сообщений из 9, страница 1 из 1
21.06.2017, 01:54
    #39475138
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
В таблице есть поле, в которое надо вставить время вставки или изменения записи,
но на стороне клиента эти данные абсолютно не нужны.


Я сделал так:
Описал как генерировать значение на стороне БД и для поля указал тип ftech-а LAZY


Код: java
1.
2.
3.
    @DBTimestampGenerator
    @Basic(fetch = FetchType.LAZY)
    private Timestamp resolution_time;// = new Timestamp(System.currentTimeMillis());



Но когда создаю объект и сохраняю его в БД все равно вижу, как после inserta делается select, поднимающий сгенерированное значение:


Hibernate: insert into CMN_DICTIONARIES (appl_appl_id, resolution_time, cdct_id) values (?, systimestamp, ?)
Hibernate: select nlsdict_.resolution_time as resolution_time3_1_ from CMN_DICTIONARIES nlsdict_ where nlsdict_.cdct_id=?


Я, честно говоря, ожидал, что раз я указал LAZY, то селект такой не будет выполняться пока я не захочу использовать значение этого поля. Что я делаю не так?
...
Рейтинг: 0 / 0
21.06.2017, 02:12
    #39475141
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
MaxiflyЯ, честно говоря, ожидал, что раз я указал LAZY...LAZY используется при "JOIN"-запросах.MaxiflyЧто я делаю не так? https://stackoverflow.com/a/21487862
...
Рейтинг: 0 / 0
21.06.2017, 07:12
    #39475170
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
Простое поле не может быть ленивым, потому что в Java нет механизма перехвата обращения к полю. Нужно создать свойство и убедиться что хибер сумел создать для него прокси. Либо нужно само значение завернуть в отдельный класс который бы умел догружать одно поле лениво. Не могу сказать какой из двух способов будет работать в hibernate.
...
Рейтинг: 0 / 0
21.06.2017, 12:43
    #39475393
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
я подкину
нашел такую аннотацию
@LazyGroup
https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#BytecodeEnhancement

Только что с ней дальше делать - пока не понял
...
Рейтинг: 0 / 0
21.06.2017, 12:52
    #39475406
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
Maxiflyя подкину
нашел такую аннотацию
https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#BytecodeEnhancement
Только что с ней дальше делать - пока не понял
Круто. По-идее это аналог FetchGroup только для атрибутов. Тогда либо имя lazyGroup должно совпадать с fetchGroup, либо должен быть метод addLazyGroup по аналогии с addFetchGroup.

Обращайте внимание на детали. LazyGroup требует инструментации байт-кода.
...
Рейтинг: 0 / 0
21.06.2017, 15:47
    #39475585
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
Blazkowicz,

Ну это еще точно не мой уровень - можете хоть немножко пояснить что есть "инструментарий байт-кода"?

А то я в доке тоже это видел типа "расширение байт кода", только не понял что это и готовых каких-то примеров попонятнее не нашел - все на всех форумах на доку ссылаются именно на это место и все.
...
Рейтинг: 0 / 0
21.06.2017, 17:05
    #39475649
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
MaxiflyНу это еще точно не мой уровень - можете хоть немножко пояснить что есть "инструментарий байт-кода"?

А то я в доке тоже это видел типа "расширение байт кода", только не понял что это и готовых каких-то примеров попонятнее не нашел - все на всех форумах на доку ссылаются именно на это место и все.
Я же уже объяснил выше. Что такое "ленивая загрузка"? Это когда данные догружаются при обращении к ним. Для того чтобы перехватить такое обращение, байт-код сущности модифицируется. Коллекциям инструментация особо не нужна. Хибер подсовывает свои коллекции и "видит" обращения к ним. К полям обращения перехватить нельзя в принципе. Можно только к свойствам. А чтобы перехватить обращения к свойствам нужны либо прокси, либо инструментация байткода. Ну, типа добавления нового кода в уже откомпилированый код.
...
Рейтинг: 0 / 0
21.06.2017, 21:40
    #39475800
Maxifly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
Blazkowicz,
Интересно почему бы не потребовать наличие Поттера и перехватить обращение уже к нему?
...
Рейтинг: 0 / 0
22.06.2017, 08:02
    #39475929
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate почему не работает LAZY?
Maxifly, ну, наверняка есть какие-то предупреждения в логе.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate почему не работает LAZY? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]