[BUG]
whatmiss opened this issue · 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 departmentList = departmentDao.findDepartmentsByLevels(1);
List departmentList = departmentDao.findAll();
ret.put("data", departmentList);
return ret;
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 departmentList;
