/**
* 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;
}
}