您的EnrolledInfo将studentId作为其Id,没有生成策略,因为它的Id来自关系,因为它是其父Id(学生)。要使其工作,必须在保存期间了解该学生。
因此,EnrolledInfo必须了解其学生,jpa本身不处理关系的双方,因此可以手动设置。
Student student = new Student();
EnrolledInfo enrolledInfo = new EnrolledInfo();
enrolledInfo.setPaidTuition(true);
enrolledInfo.setStudent(student);
student.setEnrolledInfo(enrolledInfo);
studentDao.save(student);
现在在JPA2中,正确的注释应该是:
@Entity
@Table(name = "EnrolledInfo")
public class EnrolledInfo implements Serializable {
@Id
private Long studentId;
@OneToOne(fetch = FetchType.Eager)
@Id
@JsonBackReference
private Student student;
在带有@PrimaryKeyJoinColumn的JPA1中,您需要提供完整的映射(您现在应该使用JPA2,所以没有理由使用旧的映射,只是以防万一):
@Entity
@Table(name = "EnrolledInfo")
public class EnrolledInfo implements Serializable {
@Id
@Column(name="STUDENT_ID")
private Long studentId;
@OneToOne(fetch = FetchType.Eager)
@PrimaryKeyJoinColumn(name="STUDENT_ID", referencedColumnName="STUDENT_ID")
@JsonBackReference
private Student student;