/** * This file is part of Faktotum. * * * Faktotum is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * Faktotum is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with Faktotum. * * If not, see <http://www.gnu.org/licenses/>. */ package de.romankreisel.faktotum.dao; import java.util.ArrayList; import java.util.List; import javax.ejb.Stateless; import javax.persistence.NoResultException; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import javax.persistence.criteria.Subquery; import de.romankreisel.faktotum.datamodel.BundesbruderEntity; import de.romankreisel.faktotum.datamodel.BundesbruderEntity_; import de.romankreisel.faktotum.datamodel.SessionEntity; import de.romankreisel.faktotum.datamodel.SessionEntity_; /** * The Data Access Object for the SessionEntity * * @author Roman Kreisel <mail@romankreisel.de> * */ @Stateless public class SessionDao extends JpaDao<SessionEntity> { /** * Returns a session for a key * * @param key * The key of the requested session * @throws NoResultException * if no session with this key is stored * @return The persisted Session */ public List<SessionEntity> findBySessionKeyAndUsername(String key, String username) throws NoResultException { CriteriaBuilder criteriaBuilder = this.getCriteriaBuilder(); CriteriaQuery<SessionEntity> criteriaQuery = criteriaBuilder.createQuery(SessionEntity.class); Root<SessionEntity> entityRoot = criteriaQuery.from(SessionEntity.class); List<Predicate> predicates = new ArrayList<>(); predicates.add(criteriaBuilder.equal(entityRoot.get(SessionEntity_.key), key)); Subquery<String> subQuery = criteriaQuery.subquery(String.class); Root<BundesbruderEntity> entityRoot2 = subQuery.from(BundesbruderEntity.class); predicates.add(criteriaBuilder.equal(entityRoot2.get(BundesbruderEntity_.userName), username)); criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]))); TypedQuery<SessionEntity> typedQuery = this.createQuery(criteriaQuery); List<SessionEntity> searchResult = typedQuery.getResultList(); return searchResult; } }