Lazy Loading no braço

7 respostas
K

Senhores do conhecimento, ajudem um pobre trabalhador:

Preciso definir uma arquitetura com uma série de DAO´s e VO´s,
porém não tenho a privilégio de usar Java / Hibernate / Spring :cry: para fazer o lazy loading.

Vejamos os codigos:

public class Produto {
   	int id;
   	String nome;
   	Marca marca = new Marca();   	
   	public Marca getMarca() {
   	    return marca;
   	}
   	
}

public class Marca {
	int id;
	String nome;
}

public class ProdutoDAO {
   	
   	Produto findByPrimaryKey(int id) {
   		String sql = "select * from produto where id = ?";
   		Produto produto = new Produto();
   		produto.setId(rs.getInt("id"));
   		produto.getMarca().setId(rs.getInt("id_marca"));
   		return produto;
   	}}

public class MarcaDAO {   	
   	Produto findByPrimaryKey(int id) {
   		String sql = "select * from marca where id = ?";
   		Marca marca = new Marca();
   		marca.setId(rs.getInt("id"));
   		marca.setNome(rs.getInt("nome"));
   		return marca;
   	}}

public class LazyTest {
	public static void main(String[] xxx) {
	   Produto prod = new ProdutoDAO().findByPrimaryKey(10));
	   System.out.println(prod.getId());
	   System.out.println(prod.getMarca().getNome()); // aqui e somente aqui, teria que carregar automaticamente
	}
}

Como faria o isso no “braço” ??

Espero ter sido claro.

Agradeço a todos…

7 Respostas

R

Fala ae… se eu entendi bem, da pra vc fazer assim:

no metodo getMarca(), faz o teste se é null e carrega ela la dentro…
tipo

getMarca()

{

if (marca == null)

marca = MarcaDAO.findByPrimaryKey(939393);

}

não é a coisa + linda do mundo mas resolve :lol:

era ± isso que vc perguntou?

abraço

K

rodrigobigode:
Fala ae… se eu entendi bem, da pra vc fazer assim:

no metodo getMarca(), faz o teste se é null e carrega ela la dentro…
tipo

getMarca()

{

if (marca == null)

marca = MarcaDAO.findByPrimaryKey(939393);

}

não é a coisa + linda do mundo mas resolve :lol:

era ± isso que vc perguntou?

abraço

É isso sim, o problema disso é que o VO vai depender do DAO.
Não era bem isso que eu queria. :smiley:

louds

Use um proxy.

F

Pois é, vai acabar fazendo parecido com o Hibernate. Ja que nao pode usar ele pelo menos da uma olhada como ele faz isso.
Da uma olhada na classe Hibernate, metodo “initialize” pra ver como o Hibernate faz o carregamento do “lazy” (esse metodo forca o carregamento de um mapeamento lazy=“true” é a maneira mais rapida de ver como ele faz isso) e nas interfaces HibernateProxy e PersistenteCollection pra ver como ele faz o “lazy$” propriamente dito.

]['s

rodrigoy

Exatamente, ele vai reimplementar o Hibernate… acho que o Hibernate implementa proxy usando CGLIB…

Todo mundo acha hibernate um troço do outro mundo… Mas é fácil.

brunohansen

Curiosidade! Por que você não tem o privilegio de usar o Hibernate?

Eu uma epoca tirei todos meus privilegios de usar qualquer framework para aprender a projetar bem. Moral da historia não terminei o projeto devido ao fluxo de atividades a fazer “no braço” e deixei de aprender a usar bons frameworks!

K

brunohansen:
Curiosidade! Por que você não tem o privilegio de usar o Hibernate?

Eu uma epoca tirei todos meus privilegios de usar qualquer framework para aprender a projetar bem. Moral da historia não terminei o projeto devido ao fluxo de atividades a fazer “no braço” e deixei de aprender a usar bons frameworks!

Por que o projeto foi desenvolvido em Delphi, e preciso refatorar um pedaço dele. :cry:
Eu sei que existem frameworks para Delphi, mas não poderia usar.

Abraços

Criado 15 de setembro de 2006
Ultima resposta 15 de set. de 2006
Respostas 7
Participantes 6