package net.dontdrinkandroot.example.angularrestspringsecurity.dao.blogpost;
import net.dontdrinkandroot.example.angularrestspringsecurity.dao.JpaDao;
import net.dontdrinkandroot.example.angularrestspringsecurity.entity.BlogPost;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
/**
* JPA Implementation of a {@link BlogPostDao}.
*
* @author Philip Washington Sorst <philip@sorst.net>
*/
public class JpaBlogPostDao extends JpaDao<BlogPost, Long> implements BlogPostDao
{
public JpaBlogPostDao()
{
super(BlogPost.class);
}
@Override
@Transactional(readOnly = true)
public List<BlogPost> findAll()
{
final CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder();
final CriteriaQuery<BlogPost> criteriaQuery = builder.createQuery(BlogPost.class);
Root<BlogPost> root = criteriaQuery.from(BlogPost.class);
criteriaQuery.orderBy(builder.desc(root.get("date")));
TypedQuery<BlogPost> typedQuery = this.getEntityManager().createQuery(criteriaQuery);
return typedQuery.getResultList();
}
}