为什么在尝试创建复合键时会在 Spring Data JPA 上收到 AnnotationException?

问题描述

我不知道我这样做是否正确,但我正在创建一个应用程序,为高中舞会分配门票,对于每个学生,我让学校输入 ID,因为所有学生都有一个唯一的该学校的 ID,并将其存储为密钥。但问题是不同学校的两个学生可能有相同的 ID,所以我打算将主键存储为学生 ID 和学校 ID。这是我的 Student 实体类

  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  @Entity
  @Table(name="students")
  @IdClass(StudentIdentity.class)
  public class Student {
 
@EmbeddedId
private StudentIdentity studentIdentity;
 
 
@Column(name= "first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
 
private String status;
 
@Column(name="is_restricted")
private boolean isRestricted;
 
@Column(name="restricted_reason")
private String restrictedReason;
 
@Column(name="ticket_number")
private String ticketNumber;

}

这是它所指的 StudentIdentity 类。

       @Data
   @AllArgsConstructor
    @NoArgsConstructor

    @EqualsAndHashCode


    @Embeddable
    public class StudentIdentity implements Serializable{

public StudentIdentity() {
    
}

private String studentId;


@OnetoOne(fetch= FetchType.EAGER)
@JoinColumn(name="school_id",referencedColumnName="id")
private School school;






public School getSchool() {
    return school;
}
public void setSchool(School school) {
    this.school = school;
}
public String getStudentId() {
    return studentId;
}
public void setStudentId(String studentId) {
    this.studentId = studentId;
}


} 

我还有一个 School 课程来保存有关学校的信息,所以这就是我建立一对一关系的原因,但我无法在网上找到有关如何做到这一点的示例,所以我'我不确定我是否做对了。

不过我遇到了一个例外。

org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”的 bean 在类路径资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class] 中定义时出错:调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException:无法在用 @IdClass:com.promticket.entity.Student 注释的实体中找到属性(studentId、school)

解决方法

添加:

@Delegate

之前

@EmbeddedId
private StudentIdentity studentIdentity;