@Stateless public class SchoolServiceBean implements SchoolServiceLocal { @PersistenceContext(unitName = "MyPU") private EntityManager em; // ================= STUDENTS ================= @Override public Students createStudent(Students student) { List courses = resolveCourses(student); student.setCourses(courses); courses.forEach(c -> c.getStudents().add(student)); em.persist(student); return student; } @Override public Students updateStudent(Students student) { Students existing = em.find(Students.class, student.getStudentId()); if (existing == null) return null; existing.setStudentName(student.getStudentName()); existing.setEmail(student.getEmail()); // Clear old relation existing.getCourses().forEach(c -> c.getStudents().remove(existing)); existing.getCourses().clear(); // Add new relation List updatedCourses = resolveCourses(student); existing.getCourses().addAll(updatedCourses); updatedCourses.forEach(c -> c.getStudents().add(existing)); return existing; } @Override public void deleteStudent(Integer id) { Students st = em.find(Students.class, id); if (st != null) { st.getCourses().forEach(c -> c.getStudents().remove(st)); st.getCourses().clear(); em.remove(st); } } @Override public Students findStudentById(Integer id) { return em.find(Students.class, id); } @Override public List findAllStudents() { return em.createQuery("FROM Students", Students.class).getResultList(); } // ================= COURSES ================= @Override public Courses createCourse(Courses course) { List students = resolveStudents(course); course.setStudents(students); students.forEach(s -> s.getCourses().add(course)); em.persist(course); return course; } @Override public Courses updateCourse(Courses course) { Courses existing = em.find(Courses.class, course.getCourseId()); if (existing == null) return null; existing.setCourseName(course.getCourseName()); existing.setCredits(course.getCredits()); existing.getStudents().forEach(s -> s.getCourses().remove(existing)); existing.getStudents().clear(); List updatedStudents = resolveStudents(course); existing.getStudents().addAll(updatedStudents); updatedStudents.forEach(s -> s.getCourses().add(existing)); return existing; } @Override public void deleteCourse(Integer id) { Courses c = em.find(Courses.class, id); if (c != null) { c.getStudents().forEach(s -> s.getCourses().remove(c)); c.getStudents().clear(); em.remove(c); } } @Override public Courses findCourseById(Integer id) { return em.find(Courses.class, id); } @Override public List findAllCourses() { return em.createQuery("FROM Courses", Courses.class).getResultList(); } // ===== Helper: Resolve collections ===== private List resolveCourses(Students student) { return student.getCourses().stream() .map(c -> em.find(Courses.class, c.getCourseId())) .toList(); } private List resolveStudents(Courses course) { return course.getStudents().stream() .map(s -> em.find(Students.class, s.getStudentId())) .toList(); } }