package fi.otavanopisto.muikku.plugins.communicator.dao; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import fi.otavanopisto.muikku.model.users.UserGroupEntity; import fi.otavanopisto.muikku.plugins.CorePluginsDAO; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessage; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipient; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipientUserGroup; import fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageRecipient_; public class CommunicatorMessageRecipientUserGroupDAO extends CorePluginsDAO<CommunicatorMessageRecipientUserGroup> { private static final long serialVersionUID = 6027155847330377720L; public CommunicatorMessageRecipientUserGroup create(UserGroupEntity userGroupEntity) { CommunicatorMessageRecipientUserGroup workspaceGroup = new CommunicatorMessageRecipientUserGroup(); workspaceGroup.setUserGroupEntityId(userGroupEntity.getId()); getEntityManager().persist(workspaceGroup); return workspaceGroup; } public List<CommunicatorMessageRecipientUserGroup> listByMessage(CommunicatorMessage communicatorMessage) { EntityManager entityManager = getEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<CommunicatorMessageRecipientUserGroup> criteria = criteriaBuilder.createQuery(CommunicatorMessageRecipientUserGroup.class); Root<CommunicatorMessageRecipientUserGroup> root = criteria.from(CommunicatorMessageRecipientUserGroup.class); Root<CommunicatorMessageRecipient> root2 = criteria.from(CommunicatorMessageRecipient.class); criteria.select(root).distinct(true); criteria.where( criteriaBuilder.and( root2.get(CommunicatorMessageRecipient_.recipientGroup).in(root), criteriaBuilder.equal(root2.get(CommunicatorMessageRecipient_.communicatorMessage), communicatorMessage) ) ); return entityManager.createQuery(criteria).getResultList(); } }