package org.taobao88.taobao.enterprise.dao.impl;
import java.math.BigInteger;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import org.taobao88.taobao.enterprise.dao.RecomendationDAO;
import org.taobao88.taobao.enterprise.entity.Recomendation;
import org.taobao88.taobao.enterprise.entity.RecomendationType;
@Transactional
@Repository("recomendationDAO")
public class RecomendationDAOImpl implements RecomendationDAO {
@Autowired
SessionFactory sessionFactory;
@Override
public void addRecomendation(Recomendation recomendation) {
sessionFactory.getCurrentSession().save(recomendation);
}
@Override
public void deleteRecomendation(Recomendation recomendation) {
sessionFactory.getCurrentSession().delete(recomendation);
}
@Override
public void updateRecomendation(Recomendation recomendation) {
sessionFactory.getCurrentSession().update(recomendation);
}
@Override
public Recomendation getRecomendationById(int id) {
return (Recomendation) sessionFactory.getCurrentSession().createQuery("from Recomendation where id = :id").setParameter("id", id).uniqueResult();
}
@Override
public Recomendation getRecomendationByDescription(String description) {
return (Recomendation) sessionFactory.getCurrentSession().createQuery("from Recomendation where description = :description").setParameter("description", description).uniqueResult();
}
@SuppressWarnings("unchecked")
@Override
public List<Recomendation> getRecomendations(RecomendationType type) {
return (List<Recomendation>) sessionFactory.getCurrentSession().createQuery("from Recomendation where type.typeId = :type_id").setParameter("type_id", type.getTypeId()).list();
}
@SuppressWarnings("unchecked")
@Override
public List<Recomendation> getFirstFourRecomendations(RecomendationType type) {
return (List<Recomendation>) sessionFactory.getCurrentSession().createQuery("from Recomendation where type.typeId = :type_id").setParameter("type_id", type.getTypeId()).setMaxResults(4).list();
}
@SuppressWarnings("unchecked")
@Override
public List<Recomendation> getRecomendationsPartials(int start, int end, RecomendationType type) {
Query q = sessionFactory.getCurrentSession().createQuery("from Recomendation where type.typeId = :type_id").setParameter("type_id", type.getTypeId());
q.setFirstResult(start);
q.setMaxResults(end);
return (List<Recomendation>) q.list();
}
@Override
public int getRecomendationsCount(RecomendationType type) {
BigInteger count = (BigInteger) sessionFactory.getCurrentSession().createSQLQuery("SELECT COUNT(*) FROM recomendations WHERE type = :typeId").setParameter("typeId", type.getTypeId()).uniqueResult();
return count.intValue();
}
@SuppressWarnings("unchecked")
@Override
public List<Recomendation> getRandomRecomendations(RecomendationType type) {
return (List<Recomendation>) sessionFactory.getCurrentSession().createQuery("from Recomendation where type.typeId = :type_id ORDER BY RAND()").setParameter("type_id", type.getTypeId()).list();
}
}