问题描述
我不知道我这样做是否正确,但我正在创建一个应用程序,为高中舞会分配门票,对于每个学生,我让学校输入 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;