我正在尝试使用 play 框架使用 JPA 和 MYSQL 创建数据库,但在映射 @oneToMany 时出现以下错误
PersistenceException: Error with the Join on [models.Patient.progress].
Could not find the matching foreign key for [id] in table[Results]?
Perhaps using a @JoinColumn with the name/referencedColumnName attributes swapped?
我的类(class)如下所示:
病人
@Entity
@Table(name = "Patients")
public class Patient
extends User {
@Id
@Column(name = "idPatient")
private int idPatient;
@Constraints.Required
private String medicalCoverage;
@Constraints.Required
private String disease;
@Constraints.Required
private int gradeDisease;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "patient",
fetch = FetchType.LAZY)
private List<Results> progress;
@ManyToMany
@JoinTable(name = "therapist_relation",
joinColumns = {@JoinColumn(name = "idPatient")},
inverseJoinColumns = {@JoinColumn(name = "idTherapist")})
private List<Therapist> therapists;
private int qAwardA;
private int qAwardB;
private int qAwardC;
结果
@Entity
@Table(name = "Results")
public class Results {
@Id
@Column(name = "idResult")
private int idResult;
private Game game;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name="idPatient", referencedColumnName = "idPatient", nullable = false)
private Patient patient;
@OneToMany
@JoinColumn(name="idTherapist", referencedColumnName = "idResult")
private Therapist therapist;
private int punctuation;
private String description;
我的代码有什么问题吗?
最佳答案
问题出在 Results
类中 Patient
的 @JoinColumn 注释。
您正在使用referencedColumnName
参数。
以下文档:
(Optional) The name of the column referenced by this foreign key column.
因此,在这种情况下,这个参数是没有必要的。如果您想使用它,它应该类似于 referencedColumnName = "idResult"
但正如我所说,这不是必需的。
关于mysql - 持久异常 : when using @OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370827/