Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse SpringBoot@OneToMany无限循环,带Lombok_Eclipse_Spring Boot_Hibernate - Fatal编程技术网

Eclipse SpringBoot@OneToMany无限循环,带Lombok

Eclipse SpringBoot@OneToMany无限循环,带Lombok,eclipse,spring-boot,hibernate,Eclipse,Spring Boot,Hibernate,我的项目使用SpringBoot,它具有双向映射@OneToMany @Entity @Table(name = "T_S") @Getter @Setter @EqualsAndHashCode @NoArgsConstructor @AllArgsConstructor @ToString public class S implements Serializable { @OneToMany(fetch = FetchType.LAZY, casc

我的项目使用SpringBoot,它具有双向映射@OneToMany

@Entity
@Table(name = "T_S")
@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@ToString
    public class S implements Serializable {
        @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
        @JoinColumn(name = "something", referencedColumnName = "A_ID", nullable = false, insertable = false, updatable = false)
        @OptimisticLock(excluded = false)
        private Set<A> act = new HashSet<>();
        ....something...
    }

    @Entity
    @Table(name = "T_A")
    @Getter
    @Setter
    @EqualsAndHashCode
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class A{
        @ManyToOne(optional = true, fetch = FetchType.LAZY)
        @JoinColumn(name = "A_ID", insertable = false, updatable = false)
        private S sub;
    }
  
@实体
@表(name=“T_S”)
@吸气剂
@塞特
@EqualsAndHashCode
@诺尔格构装师
@AllArgsConstructor
@托斯特林
公共类S实现可序列化{
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.MERGE)
@JoinColumn(name=“something”,referencedColumnName=“A_ID”,nullable=false,insertable=false,updateable=false)
@OptimisticLock(排除=错误)
private Set act=新HashSet();
某物
}
@实体
@表(name=“T_A”)
@吸气剂
@塞特
@EqualsAndHashCode
@诺尔格构装师
@AllArgsConstructor
@托斯特林
公共A类{
@manytone(可选=true,fetch=FetchType.LAZY)
@JoinColumn(name=“A_ID”,insertable=false,updateable=false)
私人秘书分处;
}

当我从存储库中获取数据时,它会进行不定循环。如何修复它?

我通过覆盖实体A中的三种方法
hashCode
toString
equals
解决了这个问题

@Override
public int hashCode() {
    //something
}

@Override
public String toString() {
    //something
}

@Override
public boolean equals(Object obj) {
    //something
}

不要将Lombok与JPA实体一起使用。toString()执行无限循环


其他方法是,重写多个实体的toString以返回“”。

如果您具有双向关系Lombok equals,
hashCode和toString将创建StackOverflowerError

因此,删除@ToString和@EqualsAndHashCode

我是general equals,在使用JPA时,哈希代码应该在唯一的业务密钥上实现


另一种方法是从Lombok中排除某些属性。

我认为这是一个很好的解决方案,或者我们可以@overide两种方法您可以指定在
toString
中使用哪些字段,或者使用
@Lombok.toString.exclude
注释排除特定字段,这样它就不会再进行无限循环了。