StudentDao.java
package training_center.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import training_center.entity.Course;
import training_center.entity.Student;
@Repository
@Transactional
public class StudentDao {
@PersistenceContext
private EntityManager entityManager;
public void save(Student student) {
entityManager.persist(student);
}
@Transactional(readOnly = true)
public Student findById(Long id) {
return entityManager.find(Student.class, id);
}
@Transactional(readOnly = true)
public List<Student> findAll() {
return entityManager.createQuery(
"select s from Student s order by s.fullName",
Student.class
).getResultList();
}
@Transactional(readOnly = true)
public List<Student> findByFullName(String fullNamePart) {
return entityManager.createQuery(
"select s from Student s " +
"where lower(s.fullName) like lower(:fullNamePart) " +
"order by s.fullName",
Student.class
)
.setParameter("fullNamePart", "%" + fullNamePart + "%")
.getResultList();
}
public void update(Student student) {
entityManager.merge(student);
}
public void delete(Student student) {
entityManager.remove(entityManager.merge(student));
}
public void deleteById(Long id) {
Student student = findById(id);
if (student != null) {
entityManager.remove(student);
}
}
@Transactional(readOnly = true)
public List<Student> findByCourseId(Long courseId) {
return entityManager.createQuery(
"select cs.student " +
"from CourseStudent cs " +
"where cs.course.id = :courseId " +
"order by cs.student.fullName",
Student.class
)
.setParameter("courseId", courseId)
.getResultList();
}
@Transactional(readOnly = true)
public List<Course> getCourseHistory(Long studentId) {
return entityManager.createQuery(
"select cs.course " +
"from CourseStudent cs " +
"where cs.student.id = :studentId " +
"order by cs.enrolledAt desc, cs.course.title",
Course.class
)
.setParameter("studentId", studentId)
.getResultList();
}
}