Eu tenho duas classes, pai e filha e persisto a classe pai e suas associações, um tempo depois eu gostaria que de transformar minha instância da classe pai já persistida anteriormente em uma instância classe filha sem perder as associações, isso seria possível usando JPA?
Se vc fizer pai.getBilhetes() e depois filho.getBilhetes ambos tem que te trazer o mesmo valor.
Vc fez algum teste? Deu certo/errado?
giuliasousa
Sim, jakefrog, a questão é que a minha classe pai não é abstrata, então eu posso ter instancias da mesma, o que eu não sei é como transformar a instância da classe pai numa instância da classe filha, por exemplo, tenho uma classe mamífero que possui como atributo uma lista de órgãos, assim, eu tenho uma instância de mamífero, num determinado momento eu quero instanciar um objeto cachorro, porém não quero que seja gerada uma nova lista de órgãos pra esse cachorro, quero que ele possua a lista daquela instância de mamíferos que eu havia criado anteriormente, assim eu apenas criaria um registro na minha tabela cachorro com o mesmo ID da minha instância anterior (mamífero), isso é possível? Se sim, como?
Hebert_Coelho
Uma coisa que você tem que ter em mente é:
Cachorro cachorro = new Cachorro(); // OK
Mamifero mamifero = new Cachorro(); // OK
Cachorro cachorro = new Mamifero(); // ERRO
Não faz diferença se a classe pai é abstract ou não, uma vez que você fizer uma query no DB procurando por um cachorro os dados dos mamíferos virão.
Giulia, o que vc quer é modificar um registro que já está no banco e é do tipo Mamífero?
Não sei se isso funciona, mas você pode tentar fazer algo do tipo:
Mamiferomamifero=em.find(Mamifero.class,12);Cachorrocachorro=newCachorro(mamifero); // copia todos os dados do mamifero, inclusive idem.merge(cachorro); //talvez modifique o que está no banco
se não funcionar, vc pode tentar dar um remove e persist logo em seguida.
Hebert_Coelho
Lucas Cavalcanti:
Giulia, o que vc quer é modificar um registro que já está no banco e é do tipo Mamífero?
Não sei se isso funciona, mas você pode tentar fazer algo do tipo:
Mamiferomamifero=em.find(Mamifero.class,12);Cachorrocachorro=newCachorro(mamifero); // copia todos os dados do mamifero, inclusive idem.merge(cachorro); //talvez modifique o que está no banco
se não funcionar, vc pode tentar dar um remove e persist logo em seguida.
E pq não fazer o find direto no Cachorro?
OBS.: To desafiando ou qualquer outra coisa não tá? Só to querendo entender. >_<’’’
Lucas_Cavalcanti
Pq o que está no banco não é um Cachorro, e sim um Mamífero, ela quer mudar.
giuliasousa
Vou tentar isso que vc falou, Lucas, daí digo se funcionou.
E jakefrog, não posso dar um find no cachorro porque ele não existe, eu tenho um mamífero e quero “transformá-lo” em um cachorro, entendeu?
Hebert_Coelho
Se nenhuma estratégia de herança foi adotada não sei como o JPA vai agir nesse caso viu. O.o
Até eu quero saber o resultado agora. Mahauha
Depois posta aí.
giuliasousa
Tentei o que o Lucas sugeriu, mas não deu certo, ele cria um novo registro e não salva as associações. O jeito é criar um novo registro mesmo.