Skip to content

Instantly share code, notes, and snippets.

@sergiolopes
Created July 24, 2010 17:37
Show Gist options
  • Save sergiolopes/488843 to your computer and use it in GitHub Desktop.
Save sergiolopes/488843 to your computer and use it in GitHub Desktop.
public List<Movimentacao> listaTodasMovimentacoes(Conta conta) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Movimentacao> criteria = cb.createQuery(Movimentacao.class);
Root<Movimentacao> movimentacao = criteria.from(Movimentacao.class);
criteria.where(cb.equal(movimentacao.get(Movimentacao_.conta), conta))
.orderBy(cb.desc(movimentacao.get(Movimentacao_.valor)));
return em.createQuery(criteria).getResultList();
}
public List<Movimentacao> buscaTodasMovimentacoesDaConta(String titular) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Movimentacao> criteria = cb.createQuery(Movimentacao.class);
Root<Movimentacao> movimentacao = criteria.from(Movimentacao.class);
Join<Movimentacao, Conta> join = movimentacao.join(Movimentacao_.conta);
criteria.where(cb.like(join.get(Conta_.titular), "%" +titular + "%"));
return em.createQuery(criteria).getResultList();
}
public BigDecimal calculaTotalMovimentado(Conta conta, TipoMovimentacao tipo) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<BigDecimal> criteria = cb.createQuery(BigDecimal.class);
Root<Movimentacao> movimentacao = criteria.from(Movimentacao.class);
criteria.select(cb.sum(movimentacao.get(Movimentacao_.valor)))
.where(cb.and(
cb.equal(movimentacao.get(Movimentacao_.conta), conta),
cb.equal(movimentacao.get(Movimentacao_.tipoMovimentacao), tipo)));
return em.createQuery(criteria).getSingleResult();
}
public List<ValorPorMes> listaMesesComMovimentacoes(Conta conta, TipoMovimentacao tipoMovimentacao) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<ValorPorMes> criteria = cb.createQuery(ValorPorMes.class);
Root<Movimentacao> movimentacao = criteria.from(Movimentacao.class);
Expression<Integer> month = cb.function("month", Integer.class, movimentacao.get(Movimentacao_.data));
Expression<BigDecimal> sumValor = cb.sum(movimentacao.get(Movimentacao_.valor));
criteria.select(cb.construct(ValorPorMes.class, month, sumValor))
.groupBy(month, movimentacao.get(Movimentacao_.conta), movimentacao.get(Movimentacao_.tipoMovimentacao))
.having(cb.and(
cb.equal(movimentacao.get(Movimentacao_.conta), conta),
cb.equal(movimentacao.get(Movimentacao_.tipoMovimentacao), tipoMovimentacao)))
.orderBy(cb.desc(sumValor));
return em.createQuery(criteria).getResultList();
}
public List<Movimentacao> listaTodasMovimentacoes(Conta conta) {
String jpql = "select m from Movimentacao m " +
"where m.conta = :pConta order by m.valor desc";
TypedQuery<Movimentacao> query = this.em.createQuery(jpql, Movimentacao.class);
query.setParameter("pConta", conta);
return query.getResultList();
}
public List<Movimentacao> listaPorValorETipo(BigDecimal valor, TipoMovimentacao tipo) {
String jpql = "select m from Movimentacao m where m.valor <= :pValor and m.tipoMovimentacao = :pTipoMovimentacao";
return em.createQuery(jpql, Movimentacao.class)
.setParameter("pValor", valor)
.setParameter("pTipoMovimentacao", tipo)
.getResultList();
}
public List<ValorPorMes> listaMesesComMovimentacoes(Conta conta, TipoMovimentacao tipoMovimentacao) {
String jpql =
"select new br.com.caelum.financas.modelo.ValorPorMes(month(m.data), sum(m.valor)) "
+ "from Movimentacao m group by month(m.data), m.conta, m.tipoMovimentacao "
+ "having m.conta = :pConta and m.tipoMovimentacao = :pTipoMovimentacao "
+ "order by sum(m.valor) desc";
Query query = this.em.createQuery(jpql);
query.setParameter("pConta", conta);
query.setParameter("pTipoMovimentacao", tipoMovimentacao);
return query.getResultList();
}
public BigDecimal calculaTotalMovimentado(Conta conta, TipoMovimentacao tipo) {
String jpql = "select sum(m.valor) from Movimentacao m where m.conta=:pConta and m.tipoMovimentacao=:pTipoMovimentacao";
return em.createQuery(jpql, BigDecimal.class)
.setParameter("pConta", conta)
.setParameter("pTipoMovimentacao", tipo)
.getSingleResult();
}
public List<Movimentacao> buscaTodasMovimentacoesDaConta(String titular) {
String jpql = "select m from Movimentacao m where m.conta.titular like :pTitular";
TypedQuery<Movimentacao> query = this.em.createQuery(jpql, Movimentacao.class);
query.setParameter("pTitular", "%"+titular+"%");
return query.getResultList();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment