【问题标题】:Hibernate Lazy Loading Single ColumnHibernate 延迟加载单列
【发布时间】:2018-11-22 08:09:22
【问题描述】:

使用运行在 Tomcat 和 Hibernate 5.0 中的 Spring

尝试延迟加载单个列,如果没有字节码增强,似乎不支持。我尝试遵循these 步骤,但该列仍作为初始查询加载。

@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;

弹簧配置类

@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].

我错过了什么吗?

【问题讨论】:

    标签: java spring hibernate lazy-loading load-time-weaving


    【解决方案1】:

    根据 JPA 规范指令延迟加载只是对持久性提供程序 Hibernate 的提示,在您的情况下。提供者可能不尊重您的提示。 一般来说,你的目标是什么?您在获取基本类型的附加字段时不会松懈,因为不涉及对象图。 如果你有大数组,添加@Lob注解。

    【讨论】:

    • 数组很大,我不确定@Lob 有什么好处,它似乎不影响懒惰。 fileData 总是被填充,但我们只想在有人想要查看文件内容时加载数据。我们提取这些对象的Collection 以呈现给用户,然后如果他们希望查看他们单击的内容,那就是我们希望加载数据的时候。
    • 你的数据库端filedata的类型是什么?
    • 这是一个 BLOB,所以我可以看到 @Lob 注释是多么合适。我只是不知道它对延迟加载的需求有何帮助。
    • 如果是 BLOB,那么所有 Hibernate 都会获取 location_id,而不是数据本身。
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2021-06-11
    • 2019-04-28
    相关资源
    最近更新 更多