在下面的 java 代码中获取 StackOverflowError

getting the StackOverflowError in below piece of java code

我正在尝试在 table 上实现软删除,下面是我为实现相同目的所做的代码

@Entity
@Data
@Table(name = "users")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String surname;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<Product> products = new ArrayList<>();

}

我在调试时遇到以下异常

Method threw 'java.lang.WhosebugError' exception. Cannot evaluate com.test.User.toString()

请告知这与我在实体中使用的 Lombok 的影响有关。

Lombok @Data 为您生成 toString,您可能在 Product class 中使用双向关联。可能 Product 也覆盖了 toString 方法。我猜是因为这种双向关联,你只是得到了 toString 调用的无限循环。

lealceldeiro 建议的一个解决方案是将 User class 中的产品字段排除在 toString 方法生成之外。您可以通过使用 @ToString.Exclude lombok 注释来注释您的字段来实现此目的:

@ToString.Exclude
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Product> products = new ArrayList<>();

或者您可以排除 Product 实体中的 user 字段。

您可以在其官方网站上阅读有关 lombok @ToString 的信息。