龙目岛排除字段与@ToString.排除不起作用

2022-09-03 04:55:43

我正在使用龙目岛来删除样板代码。我正在尝试将实体打印到控制台,但我得到了一个StackOverflowError。该实体与另一个实体具有双向关系,因此我想从 toString 方法中排除此实体。

我的实体如下所示:

@Entity
@Data
public class Foo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long fooId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "barId")
    @EqualsAndHashCode.Exclude
    @ToString.Exclude
    private Bar bar; 
}

这是我第一次尝试使用,它似乎没有表现。我是否错误地使用了它?我只想打印出来,当我在Foo对象上调用String时。@ToString.ExcludefooIdname

编辑

我熟悉从顶级注释中排除或包含字段的替代方法。我试图避免这种情况。我只想在类级别使用,并注释应排除的字段。@ToString@Data

编辑 2

仍在简化类上复制。龙目岛版本1.18.8。

enter image description here


答案 1

为我工作。lombok:1.18.8

import lombok.Data;
import lombok.ToString;

@Data
public class MyClass {
    public static void main(String args[]) {
        MyClass myClass = new MyClass();
        System.out.println("ToString::" + myClass);
    }

    private String a = "ABC";

    @ToString.Exclude
    private String b = "DEF";

}

输出:ToString::MyClass(a=ABC)


答案 2

@ToString取一个参数,可用于从字符串中排除字段。exclude

@ToString(exclude = {"bar"})

@Entity
@ToString(exclude = {"bar"})
public class Foo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long fooId;

    private String name;

    @ManyToOne
    @JoinColumn(name = "barId")
    @EqualsAndHashCode.Exclude
    private Bar bar; 
}

推荐