我不知道我这样做是否正确,但是我正在创建一个应用程序,该应用程序分配高中毕业舞会的门票,并且对于每个学生,我将学校放入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;