У меня есть три студента Entity, курс и StudentCourse. Студент StudentCourse сохраняет связи между Student & Course и устанавливает startDate при создании этой ассоциации. Когда связь больше не активна, в строке обновляется дата окончания. Я сохраняю ассоциации таким образом, чтобы сохранить историю. Также есть проверка в бэкэнде, чтобы гарантировать, что у студента за раз будет только один курс, для которого есть активная ассоциация, то есть, Дата окончания равна NULL.
В объекте Student я хочу использовать сопоставление один в один в Hibernate с предложением Where, чтобы соответствующие строки в таблице StudentCourse выбирались не только на основе studentId, но и указанного условия where.
Однако, когда я пытаюсь получить StudentCourse Hibernate, возникает исключение о том, что
org.hibernate.HibernateException Более одной строки с данным
идентификатор был найден
@Entity
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@OneToOne(mappedBy = "student", fetch = FetchType.LAZY)
@Where(clause = "endDate IS NULL")
private StudentCourse studentCourse;
private String name;
}
Сущность курса:
@Entity
public class Course {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
private String name;
}
StudentCourses Entity:
@Entity
public class StudentCourses {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="studentId", referencedColumnName="id")
private Student student;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="courseId", referencedColumnName="id")
private Course course;
@Temporal(TemporalType.TIMESTAMP)
private Date endDate;
@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
}
И я также проверил в StudentCourse две записи с одинаковым идентификатором studentId, но у одной из них есть EndDate. Поэтому я ищу только ту, у которой нет установленного endDate.
Есть ли какое-нибудь решение для этого?