У меня есть приложение весенней загрузки с моделями cooperator
и student
(среди прочих).у них есть отношения @oneToMany со стороны сотрудника и @ManyToOne со стороны студента
класс сотрудника:
@Entity
public class Cooperator{
private Integer id;
public void setId(Integer value) {
this.id = value;
}
@Id
public Integer getId() {
return this.id;
}
private Set<Student> student;
@OneToMany(mappedBy="cooperator", cascade={CascadeType.ALL})
public Set<Student> getStudent() {
return this.student;
}
public void setStudent(Set<Student> students) {
this.student = students;
}
public void addStudent(Student student) {
try {
this.student.add(student);
}
catch(Exception e) {
this.student = new HashSet<Student>();
this.student.add(student);
}
}
}
класс ученика:
@Entity
public class Student{
private String studentID;
public void setStudentID(String value) {
this.studentID = value;
}
@Id
public String getStudentID() {
return this.studentID;
}
private Cooperator cooperator;
@ManyToOne(optional=false)
public Cooperator getCooperator() {
return this.cooperator;
}
public void setCooperator(Cooperator cooperator) {
this.cooperator = cooperator;
}
}
Я проверяю отношенияследующим образом:
@Test
public void cooperatorStudent() {
String studentID = "260632353";
String firstname = "Saleh";
String lastname = "Bakhit";
Student student1 = service.createStudent(studentID, firstname, lastname, cooperator);
assertEquals(cooperator, student1.getCooperator());
studentID = "260632350";
firstname = "testFirst";
lastname = "testLast";
Student student2 = service.createStudent(studentID, firstname, lastname, cooperator);
assertEquals(cooperator, student2.getCooperator());
Set<Student> cooperatorStudents = cooperator.getStudent();
assertTrue(cooperatorStudents.contains(student1));
assertTrue(cooperatorStudents.contains(student2));
}
Проблема в том, что операторы assertTrue не выполняются, хотя cooperatorStudents
на самом деле содержит оба student
объекта.
Любая помощь в том, почему это оченьочень ценится.
EDIT
Я добавляю student
к cooperator
Set<Student> student
в createStudent
, вот код для этого:
@Transactional
public Student createStudent(String studentID, String firstname, String lastname, Cooperator c) {
if(!checkArg(studentID) || !checkArg(firstname) || !checkArg(lastname) || !checkArg(c)) {
throw new NullArgumentException();
}
Student student = new Student();
student.setStudentID(studentID);
student.setFirstName(firstname);
student.setLastName(lastname);
student.setIsProblematic(false);
student.setCooperator(c);
c.addStudent(student);
return studentRepository.save(student);
}
Также добавление хеш-кода @override и равных ему дает стекопотока при создании второго ученика