Re:Problemas com Lazy, como saber se o relac. já foi inicializado [RESOLVIDO]

4 respostas
RicardoCobain

Olá galera, estou desenvolvendo um projeto de integração do mentawai e Flex, e me deparei com um problema relacionado ao Hibernate, o Lazy.

Bem, indo direto ao problema é que eu preciso que em tempo de execução, determinar se um relacionamento é lazy e está inicializado,

ex:
Pessoa 1 ----- N Endereco.
Pessoa 1 ----- 1 Usuario.

Quando o relacionamento é de 1-1, é facil pois o Hibernate cria um Proxy e tem como saber usando:

if(value instanceof HibernateProxy){ HibernateProxy proxy = (HibernateProxy) value; if(proxy.getHibernateLazyInitializer().isUninitialized()) shouldRemove = true; } }

Mas o problema é saber se o relacionamento está INICIALIZADO quando este é de 1–N ou N–N, no exemplo seria saber se o SET de Endereco está Inicializado, ou seja, se foi dado o fetch.

4 Respostas

LuksS

Rpz, eu faço o seguinte:
Quando o hibernate representa um relacionamento de forma Lazy, ele cria uma sub-classe do verdadeiro tipo do relacionamento. Então o que tu deve checar é se o tipo do valor que a associação possui é uma subclasse to tipo horiginal. Eu faço isso ou usando o método isAssignableFrom de java.lang.Class

RicardoCobain

LuksS:
Rpz, eu faço o seguinte:
Quando o hibernate representa um relacionamento de forma Lazy, ele cria uma sub-classe do verdadeiro tipo do relacionamento. Então o que tu deve checar é se o tipo do valor que a associação possui é uma subclasse to tipo horiginal. Eu faço isso ou usando o método isAssignableFrom de java.lang.Class

pois é, essa subclasse é o Proxy que eu falei… isso funciona no relacionamento de 1-1, mais quando é um SET (1-N) eu não sei como o hibernate trata isso…
sei que ele cria um PersistenSet, mas ele cria isso sempre, mesmo sendo o lazy true ou false…
Toda vez que eu acesso a coleção (.size() , ou isEmpty()) ele da um select…

RicardoCobain

E aew galera, tava dando uma lida na documentação e achei … é só usar
Hibernate.isInitialized()

Simples não … :wink:

LuksS

valeu, não sabia disso

Criado 26 de fevereiro de 2009
Ultima resposta 8 de mar. de 2009
Respostas 4
Participantes 2