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

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,

[quote]ex:
Pessoa 1 ----- N Endereco.
Pessoa 1 ----- 1 Usuario.[/quote]

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.

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

[quote=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[/quote]

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…

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

Simples não … :wink:

valeu, não sabia disso