解决Spring Boot中序列化造成hibernate懒加载失效

注:fastJson不可使用,此文档为jackson


懒加载失效是因为@ResponseBody JSON序列化默认走了例如user(用户表)的getRoles(角色表)所以懒加载失效

延时加载对象如果是集合只支持Set


关系死循环参考: https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

优先推存@JsonIgnoreProperties,特殊使用@JsonView


注:使用如果没有解决(实体类tostring方法去掉)


官方解决办法

 

        
            com.fasterxml.jackson.datatype
            jackson-datatype-hibernate5
            2.9.9
        

  版本号 spring boot version 2.1.x 测试通过

/**
 * Hibernate 懒加载失效 因为json序列化
 */
@Configuration
public class HibernateJsonConfig {

    /**
     * 注册一个额外的Jackson模块
     *
     * @return Module
     */
    @Bean
    public Module hibernate5Module() {
        Hibernate5Module module = new Hibernate5Module();
        //禁用(表示要忽略@Transient字段属性,默认为true,设置为false禁用)
        module.disable(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION);
        //延时加载的对象不使用时设置为null
        module.enable(Hibernate5Module.Feature.SERIALIZE_IDENTIFIER_FOR_LAZY_NOT_LOADED_OBJECTS);
        return module;
    }

}

 

 #hibernate JPA
  jpa:
    database: MYSQL
    #在启动时初始化架构
    generate-ddl: true
    #注册OpenEntityManagerInViewInterceptor拦截器
    open-in-view: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
        current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext
        enable_lazy_load_no_trans: true

 

你可能感兴趣的:(Spring,JPA,hibernate)