Duvida/Problema entre OO e persitencia

Tenho uma classe livro do tipo


  Livro

#tombo: int
#tibulo: String
#assunto: String

gets/sets

e que persiste em um banco numa tabela do tipo


tombo integer primary key
titulor varchar(50)
assunto varchar(50)

*esses modelos estão resumidos

Minha dúvida é a seguinte:

Sem utilizar a OO, usamos uma query/select e
recuperamos apenas o tombo e o titulo para exibir
em uma consulta ou listagem. Usando OO, eu preciso
recuperar todos os objetos com todos os campos de
cada objeto para exibi-los?

Pergunto isso por utilizar uma base de dados com
grande quantidade de registros. Carregando todos
os objetos, vou gerar um grande trafego na rede e
não irei exibir as infomormações, além de ocupar
espaço em memória. Alguma sugestão? Dica?

Desde já, obrigado.
Jeferson

Bom, voce poderia usar o WHERE em sua consulta para filtrar os resultados e no ResultSet escolher apenas o campo que deseja exibir.

Valeu!

Você está presumindo que irá conseguir, após uma busca no banco, objetos do tipo livro, o que não corresponde à verdade.

No seu insert vc irá “planificar” seu objeto, ao passo que na hora de recuperar vc terá em mãos um ResultSet, que é semelhante a um Iterator. E este ResultSet não tem Livros dentro, mas sim um modelo de dados ordenado em linhas e dotado de colunas ao estilo da sua tabela relacional.

Todavia, a nível de aplicação é mais fácil lidar com objetos, e por isso existem frameworks de mapeamento, alguns vc já deve ter ouvido falar.

Portanto dê uma olhada na API java na parte de ResultSet q vc resolve a sua vida, :smiley:

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/ResultSet.html

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Connection.html

dê uma olhada, isto pode ser útil.

se eu for apresentar somente dois campos do meu objeto, por exemplo, nome e idade de uma classe cliente que é composta por vários atributos (nome, idade, endereço, telefone entre outros), eu preciso recuperar todas essas informações para todos os objetos(para cada linha do ResultSet eu terei q criar um objeto com esses valores)? Não vou estar gerando um tráfego na rede desnecessário?

Como o Sombriks sugeriu, utilize um framework objeto-relacional como o Hibernate! Ele vai te ajudar em 99% dos casos… e em casos especificos como este, vc pode utilizar o ResulTransformer do Hibernate…

Você pode escrever seu proprio ResultTransformer ou utilizar alguns que já vêm com o Hibernate como o alias to bean!!

session.createSQLQuery("select cod,nom from cliente where bla bla bla").setResultTransformer( TRANSFORMER_A_SUA_ESOLHA ).list();

Abraços!