Bom dia galera… estou com um problema aqui com meu discriminator… Esse discriminator eh feito para os tipos de Usuarios , Ex: Tenho meu usuarioTO.hbm.xml onde tenho os atributos dele normal e 3 subclass para cada tipo de usuario diferente q tenho usando discriminator. Bom isso tudo funciona normalmente quando faço em Forms diferentes… um pra cada tipo… Agora vem o problema…javascript:emoticon(’:D’); Estou centralizando o cadastros de usuario entao, estou usando meu usuario base q possue as subclass e criei um método no meu TO q de acordo com o tipo q eu seto no form ele muda o tipo do objeto… entao assim posso ter um cadastro soh para todos os usuarios e salvando sempre o usuario base… Bom… para criar um novo isso ta funcionando perfeitamente… cria certinho… sem erro… o problema eh quando preciso editar um usuario e trocar o tipo dele… quando faço isso, ele troca o tipo do usuario e antes de dar o ‘save’ e esta tudo como deve ser… perfeito… mas quando salva ele nao atualiza o tipo do usuario… continua com o tipo q foi salvo da primeira vez… alguem tem alguma dica???
abraço
Muito obrigado
Hibernate Discriminator
2 Respostas
Veja se ao mudar o tipo, o novo objeto criado internamente pelo seu TO mantem o mesmo numero do identificador, pode ser q o id seja perdido. Mas um conselho q eu dou é quanto ao desing q vc está utlizando. Não é aconselhavel usar herança nesse caso, a herança é aconselhavel para relacionamentos ‘é-um’ estáticos, Ex:
Um cachorro é um animal (cachorro ->Animal)
Vc jamais vai precisar pegar este cachorro e transformá-lo num (cavalo -> Animal), embora vc possa faze-lo criando um cavalo e setando algum dado de cachorro nele.
Mas quando vc precisar mudar o ‘tipo’ da instancia, o relacionamento ‘é-um’ é dinâmico, é aconselhado usar composição.
No seu e exemplo atual vc deve fazer algo do tipo:
UsuarioComun (extende)-> Usuario. Para torná-lo admin precisa fazer algo do tipo new UsuarioAdmin() e copiar os dados do UsuarioComun pra ele.
O correto seria:
Usuario usu = new Usuario ();
usu.setTipo(ADMIN); //use uma constante,, um enumeration, ou um objeto new TipoUsuario();
Usando composição. Essa é a melhor forma OO d fazer isto. Espero ter ajudado
[]'s
Fabricio… valeu pela ajuda… mas não teve como… fiz de uma outra forma soh pra quebrar um galho… mas eu posso sim querer mudar um tipo de alguém… se eu tenho um Usuario Operador e agora ele passa a ser Administrador tenho q trocar o tipo dele… mas ai q esta o problema… ele não consegue trocar… e nao sou eu q dou um setTipo(“Operador”)… continuo na busca pela solução aqui… pois não posso perder dados desse usuario, como por onde ele passou e tal… entao fica complicado… mas blzz… valeuuuuu e vamo q vamo… na busca…