Olá galera, eu estou fazendo recuperação em lote com Hibernate, tenho as classes Pedidocliente e CLiente, cada PedidoCliente possui um Cliente, pois bem. Criei as classes PedidoCliente e Cliente a partir do banco usando Netbeans. Levando em conta que o hibernate, recupera as associações preguiçosamente. Fiz uma consulta
HibernateUtil.getSessionFactory();
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
List list = session.createQuery("from Pedidocliente").list();
for (int i = 0; i < list.size(); i++) {
Cliente cliente;
Pedidocliente pc = ((Pedidocliente)list.get(i));
cliente = (Cliente) session.load(Cliente.class,pc.getIdcliente());
System.out.println(cliente.getNome());
}
tx.commit();
session.close();
No objeto list, gera-se todo o SQL de consulta apenas na tabela PedidoCliente, e depois cada Cliente acessado gera uma nova consulta.
Até aqui tudo bem.
Entrando no assunto de recuperação em lote, eu coloquei na classe Cliente com Annotations,
@org.hibernate.annotations.BatchSize(size=3)
Através disso os clientes deveriam ser procurados em lotes ou seja, ao invés de ser gerado um SQL para cada Cliente,
select C.* from Cliente C where C.ID = ?
era pra gerar um SQL agrupado, buscando do 1 até o 3,
select C.* from Cliente C where C.ID in ?,?,?
Li e reli o livro Java Persistence no capítulo 13, página 574, mas não tem jeito. OS clientes sempre são buscados um a um.
Não sei se vc tem conhecimento sobre isso, mas se tiver, poderia me dar uma idéia do que está acontecendo???
Valeu
Obrigado desde já