package com.jspxcms.ext.repository.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.ejb.QueryHints;
import com.jspxcms.ext.domain.Vote;
import com.jspxcms.ext.domaindsl.QVote;
import com.jspxcms.ext.repository.VoteDaoPlus;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.impl.JPAQuery;
import com.mysema.query.types.expr.BooleanExpression;
public class VoteDaoImpl implements VoteDaoPlus {
public Vote findByNumber(String number, Integer[] status, Integer siteId) {
JPAQuery query = new JPAQuery(this.em);
query.setHint(QueryHints.HINT_CACHEABLE, true);
QVote bean = QVote.vote;
query.from(bean);
BooleanExpression exp = bean.status.eq(Vote.NOMAL_STATUS);
if (siteId != null) {
exp = exp.and(bean.site.id.eq(siteId));
}
if (ArrayUtils.isNotEmpty(status)) {
exp = exp.and(bean.status.in(status));
}
if (StringUtils.isNotBlank(number)) {
exp = exp.and(bean.number.eq(number));
}
query.where(exp);
query.orderBy(bean.seq.asc(), bean.id.desc());
query.limit(1);
List<Vote> list = query.list(bean);
return list.isEmpty() ? null : list.get(0);
}
public Vote findLatest(Integer[] status, Integer siteId) {
JPAQuery query = new JPAQuery(this.em);
query.setHint(QueryHints.HINT_CACHEABLE, true);
QVote bean = QVote.vote;
query.from(bean);
BooleanBuilder exp = new BooleanBuilder();
if (siteId != null) {
exp = exp.and(bean.site.id.eq(siteId));
}
if (ArrayUtils.isNotEmpty(status)) {
exp = exp.and(bean.status.in(status));
}
query.where(exp);
query.orderBy(bean.seq.asc(), bean.id.desc());
query.limit(1);
List<Vote> list = query.list(bean);
return list.isEmpty() ? null : list.get(0);
}
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em) {
this.em = em;
}
}