今天在写SpringBoot + JPA的时候报了以下的错误
com.fasterxml.jackson.databind.JsonMappingException: Multiple
back-reference properties with name ‘defaultReference’
说明:
如果在项目中的getter / setter方法中使用@JsonBackReference两次以上,那么您应该将它们与特定的引用名称进行区分.在最新版本中只允许使用一个“defaultReference”.
所以请看代码
SysUser表跟SysUserRole表有关联关系 SysUser表跟SysPlan表有关联关系 请看代码中的这两个注解
@JsonBackReference(value="user-role")对应SysUserRole表也有一个一样的注解在setSys_user()方法上
@JsonBackReference(value="user-span")对应SysPlan表也有一个一样的注解在setSys_user()方法上
SysUser表
@Entity
//实体与表名对应
@Table(name = "sys_user")
public class SysUser {
@Id
@Column(name = "user_id")
private String userId;//用户编号(人员编号(实验室助理)等)
private String userName;//用户名
private String password;//密码
private String major;//专业
private String institute;//学院
private String classes;//班级
private String grade;//年级
private String telephone;//手机号
private String email;//邮箱
private String imageId;//个人照片
private String labId;//所属实验室
/*
配置一对多的关系-----Sys_User_Role
cascade设置级联属性,同步添加,同步删除
*/
@OneToMany(targetEntity = SysUserRole.class,cascade = CascadeType.ALL)
@JoinColumn(name = "user_id",referencedColumnName = "user_id")//name代表外键的名称,referencedColumnName代表的是主表即当前表的主键名称
private Set sys_user_roles = new HashSet();
@OneToMany(mappedBy = "sysUser")//放弃外键的维护
private Set sysPlans = new HashSet();
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getInstitute() {
return institute;
}
public void setInstitute(String institute) {
this.institute = institute;
}
public String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getImageId() {
return imageId;
}
public void setImageId(String imageId) {
this.imageId = imageId;
}
public String getLabId() {
return labId;
}
public void setLabId(String labId) {
this.labId = labId;
}
public Set getSys_user_roles() {
return sys_user_roles;
}
@JsonBackReference(value="user-role")
public void setSys_user_roles(Set sys_user_roles) {
this.sys_user_roles = sys_user_roles;
}
public Set getSysPlans() {
return sysPlans;
}
@JsonBackReference(value="user-span")
public void setSysPlans(Set sysPlans) {
this.sysPlans = sysPlans;
}
}
SysUserRole表
@Entity
@Table(name = "sys_user_role")
public class SysUserRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;//主键id
private Integer roleId;//用户类型(1:实验技术员,2:实验室助理,:学工处人员;4系统用户(学生))
//配置多对一关系--Sys_user
@ManyToOne(targetEntity = SysUser.class,fetch = FetchType.LAZY)
@JoinColumn(name = "user_id",referencedColumnName = "user_id")
private SysUser sys_user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public SysUser getSys_user() {
return sys_user;
}
@JsonBackReference(value="user-role")
public void setSys_user(SysUser sys_user) {
this.sys_user = sys_user;
}
}
SysPlan表
@Entity
@Table(name = "sys_plan")
public class SysPlan {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "recruit_id")
private Integer recruitId;
private String recruitName;
private String positionRequire;
private Integer recruitNum;
private String positionName;
private Integer state;
private Integer enrolledNum;
// private Integer userId;
@ManyToOne(targetEntity = SysUser.class,fetch = FetchType.LAZY)
@JoinColumn(name = "user_id",referencedColumnName = "user_id")
private SysUser sysUser;
// private Set sysEnrolls = new HashSet();
public SysPlan() {
}
public Integer getRecruitId() {
return recruitId;
}
public void setRecruitId(Integer recruitId) {
this.recruitId = recruitId;
}
public String getRecruitName() {
return recruitName;
}
public void setRecruitName(String recruitName) {
this.recruitName = recruitName;
}
public String getPositionRequire() {
return positionRequire;
}
public void setPositionRequire(String positionRequire) {
this.positionRequire = positionRequire;
}
public Integer getRecruitNum() {
return recruitNum;
}
public void setRecruitNum(Integer recruitNum) {
this.recruitNum = recruitNum;
}
public String getPositionName() {
return positionName;
}
public void setPositionName(String positionName) {
this.positionName = positionName;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public Integer getEnrolledNum() {
return enrolledNum;
}
public void setEnrolledNum(Integer enrolledNum) {
this.enrolledNum = enrolledNum;
}
public SysUser getSysUser() {
return sysUser;
}
@JsonBackReference(value="user-span")
public void setSysUser(SysUser sysUser) {
this.sysUser = sysUser;
}
/* public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}*/
}
既然使用了多次JsonBackReference()注解,那么我们就要加以区分