Cara, respondo sua primeira pergunta pois trabalho extamente com isso.
Resolvo aqui da seguinte forma:
dentro de cada DAO eu crio um método que me devolve uma List com o resultado da minha query.
Ex de um método que retorna a Lista em uma classe DAO:
[i]public List carregarTudoOrdenadoNome() throws HibernateException {
Session session = hibernateConfiguracao.openSession();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.addOrder(Order.asc(“nome”));
return (List) criteria.list();
}[/i]
Em seguida eu chamo uma classe que é responsável por fazer a chamada desta Lista e escrever o arquivo xml:
public void gerar(){
Map parameters = new HashMap();
InputStream reportStream = this.getClass().getResourceAsStream("/departamentos.jrxml");
try {
JasperDesign jasperDesign = JasperManager.loadXmlDesign(reportStream);
JasperReport jasperReport = JasperManager.compileReport(jasperDesign);
String[] campos = new String[] {"descricao","funcionarios"};
RelatorioDepartamentoFuncionariosDataSource relatorioDepartamentoFuncionariosDataSource = new RelatorioDepartamentoFuncionariosDataSource(listaDepartamentos);
JasperPrint jasperPrint = JasperManager.fillReport(jasperReport, parameters, relatorioDepartamentoFuncionariosDataSource);
JasperManager.printReportToPdfFile(jasperPrint, "departamentos.pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
Dá uma olhada neste site:
http://www.javalobby.org/articles/hibernatequery103/?source=archives
Ele vai clarear as ideias,
qq coisa entre em contato.
flw