Java tutorial
/*** Copyright (c) 2012 - 2020 Hrcules S. S. Jos Este arquivo parte do programa Oramento Domstico. Oramento Domstico um software livre; voc pode redistribui-lo e/ou modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como publicada pela Fundao do Software Livre (FSF); na verso 2.1 da Licena. Este programa distribudo na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU em portugus para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do projeto no endereco https://github.com/herculeshssj/orcamento ou escreva para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Para mais informaes sobre o programa Oramento Domstico e seu autor entre em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, Marco II - Nova Iguau, RJ, Brasil. ***/ package br.com.hslife.orcamento.repository; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import br.com.hslife.orcamento.entity.Conta; import br.com.hslife.orcamento.entity.FechamentoPeriodo; import br.com.hslife.orcamento.enumeration.OperacaoConta; @Repository public class FechamentoPeriodoRepository extends AbstractCRUDRepository<FechamentoPeriodo> { public FechamentoPeriodoRepository() { super(new FechamentoPeriodo()); } @Override public FechamentoPeriodo findById(Long id) { return (FechamentoPeriodo) getQuery( "FROM FechamentoPeriodo as entity LEFT JOIN FETCH entity.lancamentos WHERE entity.id = :idEntity") .setLong("idEntity", id).uniqueResult(); } @SuppressWarnings("unchecked") public List<FechamentoPeriodo> findAllByConta(Conta conta) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.eq("conta.id", conta.getId())); criteria.addOrder(Order.desc("data")); return criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); } @SuppressWarnings("unchecked") public List<FechamentoPeriodo> findByContaAndOperacaoConta(Conta conta, OperacaoConta operacaoConta) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.eq("conta.id", conta.getId())); criteria.add(Restrictions.eq("operacao", operacaoConta)); if (operacaoConta.equals(OperacaoConta.FECHAMENTO)) { criteria.addOrder(Order.desc("data")); } else if (operacaoConta.equals(OperacaoConta.REABERTURA)) { criteria.addOrder(Order.asc("dataAlteracao")); } else { criteria.addOrder(Order.asc("data")); } return criteria.list(); } @SuppressWarnings("unchecked") public FechamentoPeriodo findUltimoFechamentoByConta(Conta conta) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.eq("conta.id", conta.getId())); criteria.add(Restrictions.eq("operacao", OperacaoConta.FECHAMENTO)); List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("data")).setMaxResults(1).list(); if (resultado == null || resultado.size() != 1) { return null; } else { return resultado.get(0); } } @SuppressWarnings("unchecked") public List<FechamentoPeriodo> findFechamentosPosteriores(FechamentoPeriodo fechamento) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.eq("conta.id", fechamento.getConta().getId())); criteria.add(Restrictions.eq("operacao", OperacaoConta.FECHAMENTO)); criteria.add(Restrictions.ge("data", fechamento.getData())); return criteria.list(); } @SuppressWarnings("unchecked") public List<FechamentoPeriodo> findFechamentosAnterioresReabertos(FechamentoPeriodo fechamento) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.eq("conta.id", fechamento.getConta().getId())); criteria.add(Restrictions.eq("operacao", OperacaoConta.REABERTURA)); criteria.add(Restrictions.lt("data", fechamento.getData())); return criteria.list(); } @SuppressWarnings("unchecked") public FechamentoPeriodo findFechamentoPeriodoAnterior(FechamentoPeriodo fechamentoPeriodo) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.lt("id", fechamentoPeriodo.getId())); //criteria.add(Restrictions.eq("operacao", fechamentoPeriodo.getOperacao())); criteria.add(Restrictions.eq("conta.id", fechamentoPeriodo.getConta().getId())); List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("id")).setMaxResults(1).list(); if (resultado == null || resultado.size() != 1) { return null; } else { return resultado.get(0); } } @SuppressWarnings("unchecked") public FechamentoPeriodo findLastFechamentoPeriodoBeforeDateByContaAndOperacao(Conta conta, Date data, OperacaoConta operacao) { Criteria criteria = getSession().createCriteria(FechamentoPeriodo.class); criteria.add(Restrictions.le("data", data)); criteria.add(Restrictions.eq("operacao", operacao)); criteria.add(Restrictions.eq("conta.id", conta.getId())); List<FechamentoPeriodo> resultado = criteria.addOrder(Order.desc("id")).setMaxResults(1).list(); if (resultado == null || resultado.size() != 1) { return null; } else { return resultado.get(0); } } }