[RESOLVIDO]Consultas complexas Hibernate AGE, Extract, etc

1 resposta
javahibernatesql
R

Alguém por aqui manja bem de hibernate?

Eu tenho uma SQL um pouquinho complexa que gostaria de passar para minha aplicação, qualquer solução que gere o resultado esperado já seria útil, seja ela HQL, Criteria, etc. A SQL é a seguinte:

SELECT talhao_responsavel, cod_talhao, extract(year from (AGE(data_plantio))) as idade_plantio, 
sum(saldo)
FROM public.talhao
join plantio on talhao.id = plantio.talhao_responsavel
join propriedade on talhao.prop_encarregada = propriedade.id
where propriedade.id = 27
group by talhao_responsavel, idade_plantio, cod_talhao
ORDER BY talhao_responsavel ASC, idade_plantio;

O contexto é o seguinte, existem talhoes e nesses talhoes são feitos diversos plantios, que por sua vez cada plantio tem um data. Plantio é o ato de plantar algumas plantas no talhao. Logo se eu plantar 500 plantas em 10/10/2015 essas plantas teriam idade X anos, com o passar do tempo essas 500 plantas terão X+1 anos e assim sucessivamente.

A sql acima busca em todos os talhões de uma propriedade, a idade e a quantidade das plantas, irei utilizar o resultado para dividir as plantas entre as idades de 0a1 ano, até2 anos, até 3 anos e acima de 3 anos. Esse resultado sera mostrado em um relatorio e um dialog para o usuário.

1 Resposta

R

Fiz um método na camada DAO que executa a própria SQL. Resolvido!

public List<Object[]> getPlantioTalhao(Long id) {
    try {
        session = HibernateUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        String sql = "SELECT talhao_responsavel, cod_talhao, extract(year from (AGE(data_plantio))) as idade_plantio, \n"
                + "sum(saldo)\n"
                + "FROM public.talhao\n"
                + "join plantio on talhao.id = plantio.talhao_responsavel\n"
                + "join propriedade on talhao.prop_encarregada = propriedade.id\n"
                + "where talhao.id = :id\n"
                + "group by talhao_responsavel, idade_plantio, cod_talhao\n"
                + "ORDER BY talhao_responsavel ASC, idade_plantio;";

        SQLQuery query = session.createSQLQuery(sql);
        query.setLong("id", id);
        List<Object[]> results = query.list();
        session.close();
        return results;
    } catch (Exception e) {
        System.out.println("CATCH::::" + e.getMessage());
        e.printStackTrace();
        return null;
    }
}
Criado 17 de novembro de 2016
Ultima resposta 1 de dez. de 2016
Respostas 1
Participantes 1