我的要求是列出每个班级的班级和学生。每个学生必须在零或最多一个班级。我的代码如下,但在数据库中,每个学生都可以在很多课程中。如何让每个学生保持零到一,只有一个班级?
学生项目表如下
StudentItem
id student_id code
1 1 233
2 5 453
3 1 567
4 6 565
实体
@Entity
public class MyClass{
@Id
@GeneratedValue
private long id;
@OneToMany( cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
private List<StudentItem> students;
private String season;
...
}
@Entity
public class StudentItem{
@Id
@GeneratedValue
private long id;
@OneToOne
private Student student;
private String code;
...
}
@Entity
public class Student{
@Id
@GeneratedValue
private long id;
private String fname;
private String lname;
....
}
答案 0 :(得分:0)
在我看来,这是MyClass
和StudentItem
之间的多对一关系,MyClass
拥有它们之间的关系。此外,可以在这两个实体之间使用连接表更简单,更直接;这样,您就不会冒在数据库中创建多个MyClass
条目的风险。
这样想:一个班级和一个学生之间的实际有效关系是什么?根据您的描述,一个班级可能会容纳许多学生,但任何给定的学生可能只在一个班级。
以下是关于如何创建它的记忆的粗略示例。我假设StudentItem
和MyClass
之间有一个名为classroom_students
的加入表,列student_item_id
和class_id
。
@Entity
public class MyClass {
@Id
@GeneratedValue
private Integer id;
@OneToMany
@JoinTable(name = "classroom_students",
joinColumns = @JoinColumn(name = "student_item_id"),
inverseJoinColumns = @JoinColumn(name = "class_id"))
private List<MyClass> students;
// getters and setters for entity
}
@Entity
public class StudentItem {
@Id
@GeneratedValue
private Integer id;
@OneToOne(mappedBy = "student_id")
private Student student;
@ManyToOne(targetEntity = MyClass.class,
mappedBy = "students")
private MyClass myClass;
}