Dúvida VRaptor 3 + Hibernate

6 respostas
R

Boa Noite!

Estou com uma dúvida aqui e não consigo resolve-la.

Uso o VRaptor + Hibernate, o interceptor do Vraptor abre uma transação para mim, executa meu controller, business e DAO depois comitta a transação até ai tudo bem.

Vou exemplificar:

@Entity
@Table(name = "EMPRESA")
public class Empresa implements Serializable {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "id", fetch = FetchType.LAZY)
    private List<TabelaServico> tabelaServicoList;
}

Se no meu jsp eu uso {empresa.tabelaServicoList}, vai tudo bem, carrega normalmente, porem se no meu controller tento:

List<TabelaServico> lista = empresa.getTabelaServicoList();

Ele ate executa querie, porém nao carrega a lista no objeto lista, se eu executar a querie gerada por ele retorna dados…

por que no fonte java ele nao carrega a lista, mesmo com a sessao aberta?

obrigado

6 Respostas

Lucas_Cavalcanti

isso pq o hibernate é lazy (preguiçoso)… ele só faz uma query quando realmente precisa!

se vc só chama o getter, ele vai te retornar um proxy da lista… e só vai fazer a query qdo chamar qualquer método nessa lista…

faz esse teste: chame qualquer método da lista, o toString() por exemplo… e então o hibernate vai fazer a query

R

Faz sentido usar, segunda a documentacao, ou não?

initialize

public static void initialize(Object proxy)
throws HibernateException

Force initialization of a proxy or persistent collection.

Note: This only ensures intialization of a proxy object or collection; it is not guaranteed that the elements INSIDE the collection will be initialized/materialized.

Parameters:
    proxy - a persistable object, proxy, persistent collection or null 
Throws:
    HibernateException - if we can't initialize the proxy at this time, eg. the Session was closed
Lucas_Cavalcanti

depende, vc precisa usar essa lista em algum lugar na mesma requisição? se sim, não se preocupe em inicializar, pois ela vai ser inicializada no primeiro uso…

R

putz lucas, nun funcionou… nen chamando um metodo do list e nen com o innitialize…

ele mostra a querie no log, mas nao carrega o objeto…

Lucas_Cavalcanti

como vc tah testando que não carregou?

R

Resolvi lucas, vlw

eu tava obtendo a minha entidade pelo session.createSQLQuery…

consegui obter os meus dados sem sql nativo, e retornou normalmente

abraz

Criado 11 de agosto de 2010
Ultima resposta 12 de ago. de 2010
Respostas 6
Participantes 2