Olá pessoal,
Queria um “insight” na seguinte situação (nomes das classes hipotéticos para simplificar): tenho um repositório de itens, que faz uso de um dao para acessar os objetos de uma tabela no banco de dados e converter os objetos retornados da tabela do banco para outros objetos de interesse para meu domínio. O DAO faz uso da JPA para mapear os registros do banco em objetos (ver código abaixo).
Agora, supondo que eu tenha milhões de registros no banco, esse código iria rapidamente incorrer num OutOfMemoryError. Uma saída seria utilizar paginação no DAO. Mas aí a interface do repositório também teria que fornecer um método para trabalhar com paginação, tirando a ilusão de que um repositório é “uma lista de objetos em memória”. É isso mesmo? Alguma outra idéia de implementação?
abraços
class RepositorioItens {
// ... código omitido ...
public List<Item> getAllItens() {
List<ObjetoDoBD> objetosDoBD = dao.getAllObjetoDoBD();
List<Item> itens = new ArrayList<Item>();
// código que realiza um "processamento de negócio", convertendo a lista de "objetos do BD" para uma lista de itens
return itens;
}
}
class ObjetoDoBDDao {
public List<ObjetoDoBD> getAllIObjetosDoBD() {
return entityManager.createQuery("select object(o) from ObjetoDoBD as o").getResultList());
}
}
}