[RESOLVIDO]Consultas complexas Hibernate AGE, Extract, etc

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.

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;
    }
}