zoukankan      html  css  js  c++  java
  • Spring Data JPA stackoverflow

    1.禁止使用lombok 的@Data 注释

      使用@Data注释后,默认会重写父类的toString()方法,hashcode()等方法,在往map里存的时候,会根据equals和hashcode方法,来计算下标,而如果@Data注释的类与其他类有关联的属性(如:@onetoone,@onetomany等)且关联的属性不为空时,会不断从关联方的属性进行查找,再从关联方查找该@Data注释的类,依次循环,造成堆栈溢出。

      例子:考试信息与报名信息以 1:n  进行关联

      

    package com.apply.entity;
    
    import com.fasterxml.jackson.annotation.JsonIdentityInfo;
    import com.fasterxml.jackson.annotation.ObjectIdGenerator;
    import com.fasterxml.jackson.annotation.ObjectIdGenerators;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    import javax.persistence.*;
    import java.util.Date;
    
    /**
     * @author tianp
     * 报名信息 apply_info
     */
    @Data
    @Entity
    @Table(name = "apply_info")
    @ApiModel(value = "ApplyInfo", description = "报名信息对象")
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    public class ApplyInfo {
        @Id
        @GeneratedValue
        @ApiModelProperty(value = "id", dataType = "long")
        private Long id;
       
        @ManyToOne
        @JoinColumn(name = "examNum")
        private ExamInfo examInfo;
    
    }

      

    package com.apply.entity;
    
    import com.fasterxml.jackson.annotation.JsonIdentityInfo;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.ObjectIdGenerators;
    import lombok.Data;
    
    import javax.persistence.*;
    import java.util.Date;
    import java.util.Set;
    
    /**
     * @author tianp
     * 考试信息设置 apply_examinfo
     */
    @Data
    @Entity
    @Table(name = "apply_examinfo")
    @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
    public class ExamInfo {
        @Id
        @GeneratedValue
        private Long id;
    
        @OneToMany(mappedBy = "examInfo", cascade = CascadeType.ALL)
        private Set<ApplyInfo> applyInfos;
       
    }
    public class Test1 {
        @Test
        public void testObject() {
            ExamInfo examInfo = new ExamInfo();
            ApplyInfo applyInfo = new ApplyInfo();
            Set<ApplyInfo> set = new HashSet<>();
            set.add(applyInfo);
            examInfo.setApplyInfos(set);
            applyInfo.setExamInfo(examInfo);
            System.out.println(examInfo.toString());
            System.out.println(applyInfo.toString());
        }
    }
    java.lang.StackOverflowError
    	at java.lang.StringBuilder.append(StringBuilder.java:136)
    	at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at com.apply.entity.ApplyInfo.toString(ApplyInfo.java:17)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at java.util.AbstractCollection.toString(AbstractCollection.java:462)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at com.apply.entity.ApplyInfo.toString(ApplyInfo.java:17)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at java.util.AbstractCollection.toString(AbstractCollection.java:462)
    	at java.lang.String.valueOf(String.java:2994)
    	at java.lang.StringBuilder.append(StringBuilder.java:131)
    	at com.apply.entity.ExamInfo.toString(ExamInfo.java:16)
    。。。。。。

      

    2.关联属性使一方的属性在json转换时生效

    使用SpringMVC 默认的jackson 进行json转换时,存在关联属性,使用@JsonIgnore忽略属性(在one的一方进行忽略,)

  • 相关阅读:
    汉字编码问题
    C语言创建UTF8编码文本文件
    Know more about shared pool subpool
    SCN Headroom与时光倒流到1988年的Oracle数据库
    Know more about Enqueue Deadlock Detection
    11g新特性:RDBMS Component TRACE
    了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT
    了解11g OCM
    Bulk Collect/FORALL的性能测试
    【推荐】DBA必须了解的11g中的一些变化
  • 原文地址:https://www.cnblogs.com/coding400/p/8987148.html
Copyright © 2011-2022 走看看