Opa
Tenho um mapeamento da seguinte maneira:
EmpresaBean
@OneToMany(mappedBy="empresa", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<FuncionarioBean> funcionarios = new ArrayList<FuncionarioBean>();
FuncionarioBean
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_empresa", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
private EmpresaBean empresa;
Quando eu efetuo a ação de logar no meu sistema, eu passo um FuncionarioBean e dentro dele, tenho um EmpresaBean. Em certa parte do sistema, desejo atualizar os dados cadastrais do EmpresaBean e meu método está da seguinte maneira:
public String atualizarEmpresa() {
EmpresaDAO dao = new EmpresaDAO(EmpresaBean.class);
try {
MessageDigest md = MessageDigest.getInstance("MD5");
BigInteger hashSenha = new BigInteger(1, md.digest(getFuncionarioBean().getLogin().getSenha().getBytes()));
String senha = hashSenha.toString(16);
getFuncionarioBean().getLogin().setSenha(senha);
getFuncionarioBean().getLogin().setNivel(Status.MASTER);
getFuncionarioBean().getLogin().setStatus(Status.LIBERADO);
getFuncionarioBean().getLogin().setFuncionario(getFuncionarioBean());
getFuncionarioBean().getEmpresa().getFuncionarios().add(getFuncionarioBean());
dao.update(getFuncionarioBean().getEmpresa());
} catch (NoSuchAlgorithmException nsae){
logger.error("Erro ao codificar senha: " + nsae);
SendMail sendMail = new SendMail("Erro ao codificar senha: ", nsae);
sendMail.run();
return ERRO;
}
return verificarErros(dao);
}
Se eu deixar o @OneToMany(mappedBy=“empresa”, fetch=FetchType.LAZY) assim, vou receber a exceção:
Para resolver isso, eu já tentei todas as mágicas encontradas na net ( filtros, sessionFactory e afins ) e nada resolveu meu problema. Com todas as artimanhas que eu encontrei, só consegui resolver o problema mudando o FetchType para EAGER.
Alguém pode me dar uma explicação pq ele tem ‘dificuldades’ para abrir uma nova sessão sem qrer pegar a antiga e me explicar se tem algum problema usar EAGER?
Valeu
[]'s
David