Existe alguma maneira de mudar Eager para Lazy, apos sua declaração?

Ola pessoal tudo bem?
Surgiu a necessidade de mudar Eager para Lazy, apos sua declaração.
Ex: e declaro a lista lazy, mais quando vou fazer um select, eu digo que quero fazer encima do Eager.
Mais ou menos isso,

Alguem ja teve está necessidade?

Deste ja Agradeço.

WTF?

Não entendi nada…

class Funcionario -
LAZY
List< Telefone > telefones;

class Telefone

LAZY - Quando carregado do banco os funcionarios, será carregado so os funcionarios sem o telefone certo?
EAGER - Sera carregado os funcionarios com os telefones correto?

Supondo que eu ultilizei o Lazy. os telefones não foram carregado,
imagine que eu vou mostrar esses funcionarios em uma Grid com seus respectivos Telefone, isso ira ficar mais lento que se eu usasse o EAGER, porque ele temque ficar fazendo outro select no banco para buscar os telefones.

Chegamos ao ponto chave, existe alguma maneira de eu falar para o JPA, que somente neste momento eu quero que ele faz a busca por inteira "EAGER

Deu para intender Felagund ?

Obrigado

Deixa eu ver se entendi, em um select vc quer apenas os funcionarios, em outro vc quer os funcionarios e telefones correto?

bem eu nunca vi uma forma de fazer isso. Ja pensei em duplicar as classes de mapeamento das entidades para ter 2 tipos de relacionamento diferentes, mais da erro.

A dica que posso te dar e verificar se vc deixar EAGER vai realmente pesar muito seu banco, se é algo realmente impraticavel pois na maioria das vezes a diferenca e imperceptivel, e eu recomendaria deixar EAGER mesmo.

Caso seja pesado mesmo, tem q permacener LAZY, qnd a demora no momento do seu usuario carregar os dados, se ela realmente existir pois pelo que vi vc esta supondo isso, ela vai acontecer da mesma forma independente de EAGER ou LAZY

Então porque no Hibernate da pra fazer isto

List pessoas = session.createCriteria(Usuario.class).setFetchMode(“grupo”, FetchType.EAGER).list();

Gostaria de fazer no TopLink JPA2

[quote=erickfm8]class Funcionario -
LAZY
List< Telefone > telefones;

class Telefone

LAZY - Quando carregado do banco os funcionarios, será carregado so os funcionarios sem o telefone certo?
EAGER - Sera carregado os funcionarios com os telefones correto?

Supondo que eu ultilizei o Lazy. os telefones não foram carregado,
imagine que eu vou mostrar esses funcionarios em uma Grid com seus respectivos Telefone, isso ira ficar mais lento que se eu usasse o EAGER, porque ele temque ficar fazendo outro select no banco para buscar os telefones.

Chegamos ao ponto chave, existe alguma maneira de eu falar para o JPA, que somente neste momento eu quero que ele faz a busca por inteira "EAGER

Deu para intender Felagund ?

Obrigado

[/quote]

Sim, agora entendi, vc pode sim carregar um objeto lazy, não sei que framework vc ta trabalhando mas no hql vc pode usar o join fetch para forçar carregar nessa parte, ou chamar um metodo da collection, como por exemplo o size(), vai forçar o select antes de enviar para a view.

Então estou ultilizando JPA2 com TopLink somente
vc tem algum exemplo de codigo ?

[quote=erickfm8]Então estou ultilizando JPA2 com TopLink somente
vc tem algum exemplo de codigo ?[/quote]

Como vc recupera a sua lista?

Usando HQL um exemplo, lembrando que onde eu usar ‘em’ é uma instancia de EntityManager

  Collection<Funcionario> all = em.createQuery("from Funcionario a left join fetch a.telefones b").getResultList();

Usei LEFT join pois um funcionario pode não ter um telefone cadastrado.

Usando size da collection

  Collection<Funcionario> all = em.createQuery("from Funcionario a ").getResultList();
  for(Funcionario f : all){
      f.telefones.size();
  }

Isso deve carregar os seus telefones.

okey intendi, muito Obrigado.

abraços