我正在尝试在表上实现软删除,下面是我为实现相同目的而执行的代码
@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.StackOverflowError' exception. Cannot evaluate com.test.User.toString()
请告知这与我在实体中使用的Lombok的影响有关。
答案 0 :(得分:3)
Lombok @Data
为您生成toString
,您可能在Product
类中使用了双向关联。可能Product
也已覆盖toString
方法。由于这种双向关联,您只是在toString
调用中陷入无限循环。
lealceldeiro建议的一种解决方案是在生成User
方法时不考虑您的toString
类中的product字段。您可以通过使用@ToString.Exclude
lombok注释来注释字段来实现此目的:
@ToString.Exclude
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Product> products = new ArrayList<>();
或者您可以在user
实体中排除Product
字段。
您可以在他们的官方网站上阅读有关龙目岛@ToString
的信息。