spring-boot-demo icon indicating copy to clipboard operation
spring-boot-demo copied to clipboard

[BUG]

Open whatmiss opened this issue 3 years ago • 3 comments

测试模块:demo-orm-jpa 数据库的表有父子关系: CREATE TABLE orm_department ( id int NOT NULL AUTO_INCREMENT COMMENT '主键', name varchar(32) NOT NULL COMMENT '部门名称', superior int DEFAULT NULL COMMENT '上级id', levels int NOT NULL COMMENT '层级', order_no int NOT NULL DEFAULT '0' COMMENT '排序', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', last_update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上次更新时间', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='Spring Boot Demo Orm 系列示例表

然后查询处理的结果会这样无限循环,这是为什么呢? 查询方式(两种):

// List<Department> departmentList = departmentDao.findDepartmentsByLevels(1); List<Department> departmentList = departmentDao.findAll(); ret.put("data", departmentList); return ret;

image

whatmiss avatar Nov 28 '22 05:11 whatmiss

您的邮件已收到!

guxiren avatar Nov 28 '22 05:11 guxiren

User类需要加个注解

/** * 关联部门表 * 1、关系维护端,负责多对多关系的绑定和解除 * 2、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User) * 3、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Department) * 4、其实可以不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名, * 即表名为user_department * 关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id,这里使用referencedColumnName指定 * 关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,department_id * 主表就是关系维护端对应的表,从表就是关系被维护端对应的表 * * JPA多对多关系导致的栈溢出问题 * 使用 @JsonIgnore注解 或者使用@JsonManagedReference和@JsonBackReference注解(使用这组注解可以序列化另一个关系的类)。具体详见代码 */ @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinTable(name = "orm_user_dept", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "dept_id", referencedColumnName = "id")) @JsonIgnore private Collection<Department> departmentList;

hugqq avatar Feb 21 '23 02:02 hugqq

您的邮件已收到!

guxiren avatar Feb 21 '23 02:02 guxiren