Hibernate Ленивая загрузка одного столбца

Использование Spring в Tomcat и Hibernate 5.0

Попытка ленивой загрузки одного столбца, который, похоже, не поддерживается без улучшения байт-кода. Я попытался следовать эти шаги, но столбец по-прежнему загружается как исходный запрос.

@Bean( JpaConfig.EMF )
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
final DataSource dataSource,
final JpaVendorAdapter jpaVendorAdapter )
....
props.put( AvailableSettings.ENHANCER_ENABLE_LAZY_INITIALIZATION, Boolean.toString( true ) );
emf.setJpaPropertyMap( props );

Конфигурация столбца

@Column( name = "file_data", nullable = false )
@Basic( fetch = FetchType.LAZY )
    private byte[] fileData;

Класс конфигурации Spring

@Configuration
@EnableLoadTimeWeaving

Вывод при запуске

[INFO ] [17:22:56] [localhost-startStop-1] weaving.DefaultContextLoadTimeWeaver:76 - Determined server-specific load-time weaver: org.springframework.instrument.classloading.tomcat.TomcatLoadTimeWeaver
Jun 12, 2018 5:22:56 PM org.apache.catalina.loader.WebappClassLoaderBase addTransformer
INFO: Added class file transformer [org.springframework.context.weaving.AspectJWeavingEnabler$AspectJClassBypassingClassFileTransformer@6086a542] to web application [ROOT].
[INFO ] [17:22:56] [localhost-startStop-1] weaving.DefaultContextLoadTimeWeaver:76 - Determined server-specific load-time weaver: org.springframework.instrument.classloading.tomcat.TomcatLoadTimeWeaver
[INFO ] [17:27:05] [localhost-startStop-1] jpa.LocalContainerEntityManagerFactoryBean:356 - Building JPA container EntityManagerFactory for persistence unit 'persistenceUnit'
Jun 12, 2018 5:27:20 PM org.apache.catalina.loader.WebappClassLoaderBase addTransformer
INFO: Added class file transformer [Standard ClassFileTransformer wrapping JPA transformer: org.hibernate.jpa.internal.enhance.EnhancingClassTransformerImpl@20635e8] to web application [ROOT].

Я что-то упускаю?


person Evan L    schedule 12.06.2018    source источник


Ответы (1)


В соответствии с директивой спецификаций JPA для ленивой загрузки в вашем случае это всего лишь намек на поставщика постоянства, Hibernate. Провайдер может не уважать ваш намек. В общем, какова ваша цель? Вы не сильно теряете при извлечении дополнительного поля базового типа, так как здесь нет графа объектов. Если у вас большой массив, добавьте аннотацию @Lob.

person fg78nc    schedule 12.06.2018
comment
Массив большой, я не уверен, что мне дает @Lob, похоже, это не влияет на лень. fileData всегда заполняется, но мы хотим загружать данные только тогда, когда кто-то хочет просмотреть содержимое файла. Мы извлекаем Collection из этих объектов для представления пользователю, затем, если они хотят просмотреть содержимое, они щелкают, и именно тогда мы хотим, чтобы данные загружались. - person Evan L; 13.06.2018
comment
Каков тип filedata на стороне вашей базы данных? - person fg78nc; 13.06.2018
comment
Это BLOB, поэтому я вижу, насколько уместна аннотация @Lob. Я просто не знаю, как это помогает мне с отложенной загрузкой. - person Evan L; 13.06.2018
comment
Если это BLOB, то все Hibernate будет извлекать это location_id, а не сами данные. - person fg78nc; 13.06.2018