【发布时间】:2022-01-16 14:19:24
【问题描述】:
我有一个Student 班级:
@Getter
@Setter
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private double gpa;
private int unitsPassed;
private int failures;
@ManyToOne
@JoinColumn(name = "classroom_id", nullable = false)
private Classroom classroom;
}
还有一个Classroom 类:
@Getter
@Setter
@Entity
public class Classroom {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@OneToMany(mappedBy = "classroom", cascade = CascadeType.ALL)
private List<Student> students;
public Student getBestStudent() {
Comparator<Student> comparator =
Comparator.comparing(Student::getGpa, Comparator.reverseOrder())
.thenComparing(Student::getUnitsPassed, Comparator.reverseOrder())
.thenComparing(Student::getFailures);
return students.stream().min(comparator).orElse(null);
}
}
出于某些操作原因,包含教室的表应该有一个外键引用教室中最好的学生的 id。最好的学生被确定为getBestStudent 方法中列出的内容。我如何在课堂班级中添加一个字段来代表最好的学生。教室里的学生名单可以改变,因此最好的学生也可以改变。然后可以使用基于当前学生列表的同步服务填充新字段。
P.S.:我无法控制需要此外键的系统。
【问题讨论】:
标签: postgresql spring-boot hibernate hibernate-onetomany