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.hibernate.ejb.QueryHints;
import com.jspxcms.common.orm.Limitable;
import com.jspxcms.common.orm.QuerydslUtils;
import com.jspxcms.ext.domain.Guestbook;
import com.jspxcms.ext.domaindsl.QGuestbook;
import com.jspxcms.ext.repository.GuestbookDaoPlus;
import com.mysema.query.BooleanBuilder;
import com.mysema.query.jpa.impl.JPAQuery;
/**
* GuestbookDaoImpl
*
* @author yangxing
*
*/
public class GuestbookDaoImpl implements GuestbookDaoPlus {
public List<Guestbook> findList(Integer[] siteId, String[] type,
Integer[] typeId, Boolean isRecommend, Integer[] status,
Limitable limitable) {
JPAQuery query = new JPAQuery(this.em);
query.setHint(QueryHints.HINT_CACHEABLE, true);
QGuestbook guestbook = QGuestbook.guestbook;
predicate(query, guestbook, siteId, type, typeId, isRecommend, status);
return QuerydslUtils.list(query, guestbook, limitable);
}
private void predicate(JPAQuery query, QGuestbook guestbook,
Integer[] siteId, String[] type, Integer[] typeId,
Boolean isRecommend, Integer[] status) {
query.from(guestbook);
BooleanBuilder exp = new BooleanBuilder();
if (ArrayUtils.isNotEmpty(siteId)) {
exp = exp.and(guestbook.site.id.in(siteId));
}
if (ArrayUtils.isNotEmpty(type)) {
exp = exp.and(guestbook.type.number.in(type));
}
if (ArrayUtils.isNotEmpty(typeId)) {
exp = exp.and(guestbook.type.id.in(typeId));
}
if (isRecommend != null) {
exp = exp.and(guestbook.recommend.eq(isRecommend));
}
if (ArrayUtils.isNotEmpty(status)) {
exp = exp.and(guestbook.status.in(status));
}
query.where(exp);
}
private EntityManager em;
@PersistenceContext
public void setEm(EntityManager em) {
this.em = em;
}
}