mysql - 持久异常 : when using @OneToMany

标签 mysql hibernate jpa playframework one-to-many

我正在尝试使用 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/

相关文章:

python - 如果持有数据库连接的线程死亡,数据库连接是否会返回池?

mysql替换位置处的字符

java - 使用级联保存时出现 hibernate 异常 ="save-update"

java - JUnit 测试::assertEquals() 的问题

java - 使用 EclipseLink 将多个 "Select Case"语句聚合到命名查询中

mysql - 根据另一列中的数据更新 MySQL 表行

MySql:从年和月创建日期时间

hibernate - Spring 中对实体管理器的静态访问和不寻常的架构

java - 在 Hibernate 中使用不同别名多次连接到同一关联

jpa - OpenJPA 是否适用于 Glassfish?