]> git.somenet.org - pub/jan/dst18.git/blob - ass1-jpa/src/main/java/dst/ass1/jpa/dao/impl/MaterialServerDAO.java
[1.2.3a] oidaaaa... tag is vorbei :/
[pub/jan/dst18.git] / ass1-jpa / src / main / java / dst / ass1 / jpa / dao / impl / MaterialServerDAO.java
1 package dst.ass1.jpa.dao.impl;
2
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;
10
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;
18
19 public class MaterialServerDAO extends GenericDAO<MaterialServer, IMaterialServer> implements IMaterialServerDAO {
20     public MaterialServerDAO(EntityManager em) {
21         super(em, MaterialServer.class);
22     }
23
24     @Override
25     public Collection<IMaterialServer> findMaterialServersForCourse(ICourse course) {
26         CriteriaBuilder b = em.getCriteriaBuilder();
27         CriteriaQuery<IMaterialServer> q = b.createQuery(IMaterialServer.class);
28
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);
32
33         q.select(root).distinct(true);
34         if (course != null) q.where(lessons.in(course.getLessons()));
35
36         List<IMaterialServer> a = em.createQuery(q).getResultList();
37         return a;
38     }
39 }