我有3个实体,分别是“学生”,“课程”和“学生课程”,
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue
private Integer id;
private String fullName;
}
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue
private Integer id;
private String courseName;
}
@Entity
@Table(name = "student_course")
public class StudeCourse {
@Id
@GeneratedValue
private Integer studentId;
private Integer courseId;
private String extraColumn;
}
限制:有几个限制
帮助来检索“学生课程”。
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue
private Integer id;
private String fullName;
// this is not correct code but just what I want
@JoinEntity(entity=StudentCourse, column="courseId")
private Course course;
}
答案 0 :(得分:0)
StudentCourse
是必需的,因此不能跳过
好吧,让我们一起工作。
一个学生只能选一门课程或根本没有一门课程
表示@OneToOne
和Student
之间存在StudentCourse
关系。
使用给定的信息,以下实体模型将起作用:
@Entity
@Table(name = "student")
public class Student {
@Column(name = "id")
@Id
@GeneratedValue
private Integer id;
@Column(name = "full_name")
private String full_name;
@OneToOne
@PrimaryKeyJoinColumn
private StudentCourse studentCourse;
}
@Entity
@Table(name = "student_course")
public class StudentCourse {
@Column(name = "id")
@Id
@GeneratedValue
private Integer id;
@JoinColumn(name = "id", nullable = false, updatable = false)
@MapsId
@OneToOne
private Student student;
@JoinColumn(name = "course_id")
@ManyToOne
private Course course;
...
}
快速浏览:
@OneToOne
字段上的Student.studentCourse
表示每个Student
只能有一个StudentCourse
,而没有其他内容。@PrimaryKeyJoinColumn
字段上的Student.studentCourse
表示Student
的主键列的值应用作相关实体的外键,即{{1} }。StudentCourse
字段上的@OneToOne
表示每个StudentCourse.student
只能有一个StudentCourse
。Student
字段上的@MapsId
表示应将StudentCourse.student
的主键列用作关联的联接列。要检查学生是否已分配课程,只需检查StudentCourse
是否为student.getStudentCourse() != null
即可获得分配的课程。