Já tentei várias vezes e nunca consegui trabalhar efetivamente com Entities que são enviados para o client remotamente de maneira eficiente (sem fazer gambi).
Gostaria de saber como desatachar um entity antes de manda-lo para o client.
ex:
@Entity
class Nota {
@ManyToOne(joinColumn="CODIGO_CLIENTE, fetch=FetchType.LAZY)
private Cliente cliente;
}
@Stateless
@Remote(NotaRepositorio.class)
class NotaRepositorioSession {
public Nota consultarNota(Integer codigoNota) throws Exception {
Nota nota = entityManager.find(Nota.class, codigoNota);
return nota;
}
}
class Teste {
public void static main(String[] a) throws Exception {
NotaRepositorio repositorio = // FAZ LOOKUP REMOTO
Nota nota = repositorio .consultarNota(1);
nota.getCliente() // DÁ ERRO
}
}
Aí temos a pergunta: pra que você quer que o EJB devolva esses objetos? Se for pra fazer alguma regra de negócio em cima, não seria mais conveniente colocar essa regra também dentro do EJB?
Um Stateless Session Bean serve pra fazer uma operação completa por si só. Se é pra devolver algo, devolva tudo o que você quer de uma só vez.
Mas tem uma coisa que me ocorreu. Você não poderia usar Stateful Session Bean? E usar um PresistenceContext do tipo Extended? Como em: