Spring Boot配置Doctor与Specialty多对多关联抛出BeanCreationException如何解决
错误根因排查
你遇到的mappedBy reference an unknown target entity property错误,是因为JPA的多对多关联中,mappedBy的值必须严格等于关联对方实体中对应集合属性的字段名:
Doctor实体里specialties属性的@ManyToMany(mappedBy = "doctor")配置错误,你在Specialty实体里定义的关联Doctor的集合属性名为doctors(复数),不是doctor(单数),二者不匹配导致JPA找不到对应属性抛出异常。
修正代码
1. 修改Doctor类的多对多关联配置
@Entity @Table(name="doctor") public class Doctor extends BaseEntity{ private String name; // 把mappedBy的值从doctor改成doctors,和Specialty类里的属性名对应 @ManyToMany(mappedBy ="doctors") private Set<Specialty> specialties; @OneToMany(mappedBy ="doctor") private List<Patient> GpOfPatients; }
2. 可选优化:避免循环关联序列化问题
如果后续做接口返回实体序列化时,记得在specialties或者Specialty类的doctors属性上加@JsonIgnore,避免序列化循环嵌套栈溢出。
额外注意事项
你当前的多对多关联是把Specialty作为关系维护端(因为@JoinTable写在Specialty类里),如果要修改医生的所属专科,需要通过修改Specialty的doctors集合来生效;如果想要把Doctor作为维护端,可以把@JoinTable移到Doctor的specialties属性上,同时把Specialty类的@ManyToMany加上mappedBy = "specialties"。
内容的提问来源于stack exchange,提问作者Luboslav Kakanakov
相关产品推荐
相关产品推荐

