1 package dst.ass1.jpa.dao.impl;
3 import dst.ass1.jpa.dao.IMaterialServerDAO;
4 import dst.ass1.jpa.model.ICourse;
5 import dst.ass1.jpa.model.IMaterialServer;
6 import dst.ass1.jpa.model.impl.Lesson;
7 import dst.ass1.jpa.model.impl.Material;
8 import dst.ass1.jpa.model.impl.MaterialServer;
9 import dst.ass1.jpa.util.Constants;
11 import javax.persistence.EntityManager;
12 import javax.persistence.criteria.CriteriaBuilder;
13 import javax.persistence.criteria.CriteriaQuery;
14 import javax.persistence.criteria.Join;
15 import javax.persistence.criteria.Root;
16 import java.util.Collection;
17 import java.util.List;
19 public class MaterialServerDAO extends GenericDAO<MaterialServer, IMaterialServer> implements IMaterialServerDAO {
20 public MaterialServerDAO(EntityManager em) {
21 super(em, MaterialServer.class);
25 public Collection<IMaterialServer> findMaterialServersForCourse(ICourse course) {
26 CriteriaBuilder b = em.getCriteriaBuilder();
27 CriteriaQuery<IMaterialServer> q = b.createQuery(IMaterialServer.class);
29 Root<MaterialServer> root = q.from(MaterialServer.class);
30 Join<MaterialServer, Material> materials = root.join(Constants.A_MATERIALS);
31 Join<Material, Lesson> lessons = materials.join(Constants.M_MATERIAL_LESSON);
33 q.select(root).distinct(true);
34 if (course != null) q.where(lessons.in(course.getLessons()));
36 List<IMaterialServer> a = em.createQuery(q).getResultList();