在下面的 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
的信息。
我正在尝试在 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
的信息。