Fala pessoal blz?
Seguinte, estou com um problema que ta me tirando o sono… Estou em um projeto de uma aplicação que envolve JAVA de backend e Flex de FrontEnd. Utilizo o BlazeDS com Spring. Tive problemas do famoso LazyLoad, ai implementei o padrão OpensessionInViewFilter, e tudo funcionou a mil maravilhas. Quando precisava de uma entidade usava um JOIN FETCH direto nas minhas queries , e ele trazia para a interface os objetos necessários. Só que executando diversos testes verifiquei um problema que aparentemente já revirei a internet e não consigo resolver.
Vou generalizar, caso não dê pra entender colocarei meu código:
1 -> Tenho uma entidade A com diversos relacionamentos LAZY=TRUE, quando faço o select nessa entidade coloco o “LEFT OUTER JOIN FETCH” para as entidades que desejo que sejam carregadas. ÓTIMO, quando faço uma pesquisa todas essas entidades veêm preenchidas como eu preciso. Quando vou salvar qualquer uma dessas entidades, o ENTITY MANAGER não realiza o refresh antes da função executar o retorno. Então o que acontece, ele serializa o objeto para o flex sem inicializar as variáveis LAZY, e elas chegam la nulas. É possível ver no console do do TOMCAT o hibernate executando as queries dos joins após o retorno da função, só que já é tarde demais, pois o objeto já foi serializado para o flex. Algumas vezes esses selects do hibernate acontecem antes do retorno e o objeto é transferido certo.
2-> Esse problema só ocorre na hora de salvar o objeto, ou quando eu tenho mais de uma operação sendo chamada no entitymanager por exemplo:
- em.find(objeto1)
- em.find(objeto2)
- em.find(objeto3)
E assim por diante, ele coloca todas operações na fila e executa as mesmas, mas o carregamento dos relacionamentos load é feito asíncrono, ele marca as variávies com aquele $$_javassist e retorna para o Flex.
Alguém sabe como forçar que esse Fetch seja feito antes do retorno da função?
Desde já agradeço