【发布时间】:2019-11-05 08:57:42
【问题描述】:
我正在尝试在表上实现软删除,下面是我为实现相同功能所做的代码
@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
Data为您生成toString并且您可能正在您的 SubDomain 类中使用双向关联。并且可能 SubDomain 也覆盖了 toString 方法。由于我猜这种双向关联,您只是得到了toString调用的无限循环。显示您的SubDomain课程。 -
@michalk 是对的,我以前见过这个。如果可能,请尝试从
toString一代中排除subDomains -
@lealceldeiro 感谢您的快速建议,请您也请交叉检查我的上表设计,特别是对于列 is_active
-
您可能应该为您的其他问题打开另一个单独的帖子(关于lombok 在实体和数据库表中的影响),但我认为没有必要。据我所知,lombok 与持久层无关。它所做的只是为您创建一堆构建器(getter、setter、toString 等)。这些都不会影响持久层。但是,在这方面一丝不苟并分析您的项目并从整体背景的大局中分析您的项目总是很理智的。
-
“下面是代码”在哪里?。