Estou com um problema na hora de fazer uma edição!
Estou usando jsf.
É o seguinte tenho uma tela que o usuario faz a consulta com o resultado da consulta o usuario pode clicar em uma opção para visualizar e editar.
Quando ele escolhe a opção editar ele vai para outra tela com os dados populados do formulario para edição.
Os usuarios tem um relacionamento de 1 para muitos com outra entidade sendo assim além do formulario populado ele ainda consegue vizualizar uma lista onde tem <h:selectOneRadio > onde tem a opção de desativar ou ativar a relação, quando eu faço a edição e escolho a opção de salvar e mudo algum campo do <h:selectOneRadio > a minha lista chega vazia.
na hora de atualizar esse usuario e seus pedidos não consigo, só vem para mim os campos o usuario eu perco a lista que está ligada a esse usuario.
Sem código fic difícil te ajudar. E o que vc quis dizer com ativar ou desativar a relação?
dev.rafael
Cara, o código iria ajudar p/ caramba! Mesmo assim eu vou tentar te ajudar.
Eu imagino que o seu ManagedBean está configuradoe escopo de request.
Se for esse o caso é natural que vc perca os dados do usuário, a menos que
vc esteja usando algum componente p/ salvar essa informação no cliente.
Então, se vc está salvando o usuário no cliente é importante lembra-se que
o JSF vai chamar o método toString() da classe usuário e renderizar essa
String no cliente, portanto não será possível restaurar o objeto original
sem ajudar de um Custom converter.
Bom, o que eu aconselho é: Use um outro ManagedBean no escopo de Session
apenas p/ manter os dados do usuário. Então use a um managed-property para
injetar esse ManagedBean no ManagedBean que vai salvar os dados do formulário,
dessa forme esse ultimo ManagedBean poderá continuar sendo um RequestScoped.
Avisa se funcionou, se não, posta o código.
S
santos.levi
Bom eu não perco o usuario eu perco a outra parte que ele tem relacionamento, por exemplo quando eu vou editar o usuario eu posso editar também as outras entidades que está relacionadas a ele, quando eu vou atualizar os dados o Usuario atualza mas os outros dados da relação não consigo.
Ativar e desativar é uma regra. por exemplo meu Usuario pode estar relacionando com varios orgãos ai eu quero desativar essa relação.
dev.rafael
Bom, se o seu problema é algo do tipo LazyInitializationException, isso acontece pq
a transação na qual a sua entidade Usuario foi lida já não existe mais. Tente re-anexar
a entidade ao seu EntityManager através de uma chamada ao método
java.lang.Object merge(java.lang.Object).
Agora se o q vc realmente está querendo é ativar e desativar uma restrição de chave
estrangeira da sua base de dados, ai é bem mais complicado. Vc não poderá ter essa
restrição da sua base de dados pois o seu SGBD não permitirá que registros que não
atendam as restrições sejam inseridos nas suas relações, ou mesmo a modificação de
registros existente de modo que estes parem de atender as restrições. Essa restrição
não poderá existir na base de dados, ao invés, vc deverá controlar isso na mão. Para tal
o melhor a fazer é adicionar uma camada de persistência ao seu código (caso ainda não
exista) e no UsuarioDAO vc deverá colocar todo o código de controle da restrição de chave
extrangeira que vc está simulando. Só assim será possível usar uma flag p/ decidir se
as restrições devem ou não ser consideradas no momento da inserção, ou edição de um
registro.
Acertei dessa vez?
S
santos.levi
Não estou querendo desativar relação de chave estrangeira.
É o seguinte dentro da classe Orgão eu tenho um atributo chamado status, é esse campo que eu quero atualizar, porem da aquele erro quando chega o usuario com os orgão no meu EJB para mim dar um merge os orgão que estão relacionados a esse Usuario não vem junto com ele, a collection de orgãos que o usuario tem vem vazia!!!
o problema que eu tenho que fazer uma atualização em massa ou não…
dev.rafael
Cara eu já fiz dois chutes aqui e errei feio. Não seria possível postar
o código, ao menos do seu EJB, e apontar a linha em que o problema
ocorre. Assim ficaria mais fácil.