zoukankan      html  css  js  c++  java
  • Hibernate fetch相关

    fetch=FetchType.LAZY 时,spring boot jackson 返回数据时会出错。

    可配置使用Hibernate4Module 帮助解决:

    @Configuration
    public class JacksonConfig extends WebMvcConfigurerAdapter {
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
            converters.add(jacksonMessageConverter());
            super.configureMessageConverters(converters);
        }

        private MappingJackson2HttpMessageConverter jacksonMessageConverter() {
            MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
            ObjectMapper mapper = new ObjectMapper();
            mapper.registerModule(new Hibernate4Module());
            messageConverter.setObjectMapper(mapper);
            return messageConverter;
        }
    }

    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-hibernate4</artifactId>
      <version>2.4.6</version>
    </dependency>

    fetch=FetchType.EAGER,遇到查询很快,但hibernate 处理很慢的情况。

    究其原因在于hibernate 默认使用FetchMode.JOIN,产生的sql 虽然执行很快,几十或几百毫秒,但是,结果记录有几万甚至几十万,hibernate 处理需要花费数秒或数十秒。

    在属性上(实体集合)配置注解@Fetch(FetchMode.SUBSELECT),使用子查询方式查询子集合。结果花费时间为几百毫秒。

    附上注解说明:

    public enum FetchMode {
        /**
         * use a select for each individual entity, collection, or join load.
         */
        SELECT,
        /**
         * use an outer join to load the related entities, collections or joins.
         */
        JOIN,
        /**
         * use a subselect query to load the additional collections.
         */
        SUBSELECT
    }

  • 相关阅读:
    ubuntu /etc/rc.local 不执行
    HTML中设置页面内嵌跳转
    JS使用AudioContext播放音乐
    Unity实现摄像机以某个物体为中心旋转
    Unity中实现通过鼠标对物体进行旋转平移缩放
    解决Windows上无法创建以点开头的文件问题
    解决FBX模型导入Unity后没有贴图的问题
    nedb中使用update更新数据的原理
    Electron 渲染进程中解决require is not defined的问题
    Base64转Blob的方式
  • 原文地址:https://www.cnblogs.com/phoenix-smile/p/6229716.html
Copyright © 2011-2022 走看看