为什么我在尝试创建复合键时得到Spring Data JPA上的AnnotationException ?



我不知道我这样做是否正确,但是我正在创建一个应用程序,该应用程序分配高中毕业舞会的门票,并且对于每个学生,我将学校放入ID,因为所有学生在该学校都有唯一的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。在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejpacconfiguration .class]中创建名称为'entityManagerFactory'的bean时出错:调用init方法失败;嵌套异常是org.hibernate.AnnotationException:无法在用@IdClass:com.promticket.entity.Student注释的实体中找到属性(studentId, school)

添加:

@Delegate

之前
@EmbeddedId
private StudentIdentity studentIdentity;

最新更新