Service: of ManyToOne: Many Seite:
public Lehrer createLehrer(@NonNull Lehrer lehrer) {
if (lehrer.getStudents() != null) {
for (Student student : lehrer.getStudents()) {
student.setLehrer(lehrer);
}
}
return lehrerRepository.save(lehrer);
}
public Lehrer updateLehrer(@NonNull Integer id, @NonNull Lehrer updatedLehrer) {
return lehrerRepository.findById(id).map(existingLehrer -> {
existingLehrer.setFirstName(updatedLehrer.getFirstName());
existingLehrer.setLastName(updatedLehrer.getLastName());
if (updatedLehrer.getStudents() != null) {
if (existingLehrer.getStudents() != null) {
for (Student student : existingLehrer.getStudents()) {
student.setLehrer(null);
}
}
for (Student student : updatedLehrer.getStudents()) {
student.setLehrer(existingLehrer);
}
}
existingLehrer.setStudents(updatedLehrer.getStudents());
return lehrerRepository.save(existingLehrer);
}).orElse(null);
}
ManyToMany:
public Course addCourse(Course course) {
if (course.getStudentIds() != null) {
List<Student> students = studentRepository.findAllById(course.getStudentIds());
course.setStudents(students);
}
return courseRepository.save(course);
}
public Student addStudent(Student student) {
if (student.getCourseIds() != null) {
List<Course> courses = courseRepository.findAllById(student.getCourseIds());
student.setCourses(courses);
}
return studentRepository.save(student);
}
update evtl. wie bei Many?
Ari Code: StudentCriteriaRepository:
public interface StudentCriteriaRepository {
Page<Student> findStudentsByVornameStartsWith(String prefix, Pageable pageable);
}
StudentCriteriaRepositoryImpl:
@Repository
public class StudentCriteriaRepositoryImpl implements StudentCriteriaRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
public List<Student> findStudentsByVornameStartsWith(String prefix, Pageable pageable) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Student> query = cb.createQuery(Student.class);
Root<Student> student = query.from(Student.class);
query.select(student).where(cb.like(student.get("vorname"), prefix + "%"));
if (pageable.getSort().isSorted()) {
pageable.getSort().forEach(order -> {
if (order.getProperty().equalsIgnoreCase("nachname")) {
if (order.isAscending()) {
query.orderBy(cb.asc(student.get("nachname")));
} else {
query.orderBy(cb.desc(student.get("nachname")));
}
}
});
} else {
query.orderBy(cb.asc(student.get("nachname")));
}
TypedQuery<Student> typedQuery = entityManager.createQuery(query);
typedQuery.setFirstResult((int) pageable.getOffset());
typedQuery.setMaxResults(pageable.getPageSize());
return typedQuery.getResultList();
}
StudentController:
@GetMapping("/studenten")
public List<Student> getStudentsByVorname(@RequestParam String prefix, Pageable pageable) {
return studentRepository.findStudentsByVornameStartsWith(prefix, pageable);
}