Hibernate carregar objetos dinamicamente

3 respostas
renandemelo

Pessoal,

Estava mexendo no hibernate e percebi algo, quando estou em meu código e realizo uma query de um objeto por exemplo no meu caso, de um objeto da classe Musica. Esta classe possui uma List de objetos da classe Estrofe. Quando eu realizo esta query, o hibernate me retorna uma série de objetos de Musica, porém, se eu por alguma razão tento pegar um objeto do tipo Estrofe de alguma música, ele vai ao banco de dados de novo para pegar este objeto. Achei isto fascinante pois ele pega do banco de dados os objetos somente se eu for utilizá-lo. A minha dúvida se deve ao fato de não entender como ele realiza isto de fato. Como poderia fazer algo semelhante em puro JDBC?

3 Respostas

renandemelo

Legal mesmo.

Então cara, agora eu tive o seguinte problema. Pego um objeto do tipo Musica do BD. Este objeto possui um objeto LetraDeMusica que por sua vez possui uma List de Estrofes. Meu problema é o seguinte… Possuo em música um método chamado getEstrofes() que delega a implementação deste método ao seu objeto LetraDeMusica:

class Musica{
      LetraDeMusica letra;
      ...
      public List<Estrofe> getEstrofes(){
            return letra.getEstrofes();
      }

}
class LetraDeMusica{
      List<Estrofe> estrofes;
      ...
      public List<Estrofe> getEstrofes(){
            return lthis.estrofes;
      }

}

E está dando null pointer exception…
Você sabe como eu poderia fazer este lazy loading nesta situação, ou como eu poderia alterar a forma de pensar?

renandemelo

Desculpa cara, já descobri o problema aqui. Agradeço sua ajuda.

seufagner

Isto é o famigerado lazy-loading…

Quanto ao JDBC não entendi a pergunta cara… Visto que o Hibernate, óbvio, utiliza o próprio. JDBC não carrega grafos de objetos, aliás, ele nem mesmo “vê” os dados carregados como pertencente ou relacionado a um objeto específico… É justamente pra isso que existe o Hibernate, dentre tantos outros benefícios até mais interessantes.

[]s

Criado 15 de dezembro de 2006
Ultima resposta 15 de dez. de 2006
Respostas 3
Participantes 2