Prezados,
Estou necessitando cria uma cópia de um objeto para que o atual seja setados alguns valores e salvo no BD e a cópia seja salvo como uma nova instancia com um novo ID e com os parâmetros como null.
Qual a melhor forma?
O Objeto que tenho atual ele não possui a propriedade .clone()
Alguma sugestão? estou usando JPA.
Desde já agradeço.
Cara, tem como você explicar melhor? talvez com um exemplo. Não ficou muito claro pra mim.
Tenho o objeto1, e quero criar o objeto2 igual ao 1 porém com alguns dados diferentes então faço o seguinte:
objeto1.datafinal = new Date();
objeto1.finalizado = true;
objeto1.datasolicitacao = new Date();
objeto1.save();
Classe objeto2 = Objeto1;
objeto2.id = //Deveria ter um novo ID e não o ID do Objeto 1 como esta ficando
objeto2.datafinal = null;
objeto2.finalizado = false;
objeto2.datasolicitacao = null;
objeto2.save();
Pensei em fazer algo do tipo:
Mas este clone() não exite no objeto.
Espero que tenha explicado de forma mais objetiva agora.
Obrigado, desde já.
tem a API Commons BeanUtils que pode te ajudar. ela copia os atributos de um objeto a outro. Ex:BeanUtils.copyProperties(objeto1, objeto2)
Aí depois você teria que alterar os valores que quer na mão.
EDIT: outra solução é você implementar esse método clone() da maneira que quiser.
Valeu a segunda opção foi a que também pensei, mas vou optar pela 1ª opção que mostrou…
vlw!
[quote=jeroqueiroz]Valeu a segunda opção foi a que também pensei, mas vou optar pela 1ª opção que mostrou…
vlw![/quote]
Dependendo do caso, eu sugiro a segunda opção, pois você pode copiar apenas os atributos que te interessam, sendo que no primeiro caso, vai copiar todos, e setar alguns na mão, todas as vezes que quiser clonar.
A Questão é que quero todos somente duas datas que irei setar como NULL e o ID que terei q usar o próximo a ser gerado, melhor que criar um clone que quando por algum motivo entrar mais atributos no model teria que ficar alterando o método clone, sendo que com a 1ª opção não vejo este necessidade, já estaria contemplado.
[quote=jeroqueiroz]A Questão é que quero todos somente duas datas que irei setar como NULL e o ID que terei q usar o próximo a ser gerado, melhor que criar um clone que quando por algum motivo entrar mais atributos no model teria que ficar alterando o método clone, sendo que com a 1ª opção não vejo este necessidade, já estaria contemplado.
[/quote]Seria melhor então vc fazer um new no “clone” e alterar o necessário sem passar o ID.
Parece que você não precisa de um clone dito e feito, mas sim de uma outra instância com apenas alguns dados iguais.
Na verdade quero um clone com dois atributos diferentes e um novo ID pois será persistido como um novo objeto, ou seja será os mesmos dados para objeto1 e objeto2, diferenciando apenar:
Objeto1:
dataInicio = new Date();
dataFim = new Date();
Objeto2:
dataInicio = null;
dataFim = null;
id = //novo ID;
objeto1.save();
objeto2.save();
sendo dois objetos de ID’s diferentes no Banco.
Faça tipo assim:[code]public class Dog{
public Dog duplicate(){
Dog dog = new Dog();
dog.setNome(this.nome);
// coloca tudo q é devido
return dog;
}
}
//e na hora de usar
entityManager.save(dog1);
Dog dog2 = dog1.duplicar();
entityManager.save(dog2);[/code]
RESOLVIDO.
Sei que o tópico é antigo mas tenho certeza que outras pessoas precisam e precisarão disto. Então para quem necessitar eu criei uma lib que resolve esse problema e de forma automática. Copiando inclusive os relacionamentos da entidade, os relacionamentos dos relacionamentos, etc… enfim, todo o contexto de persistencia da entidade baseado nas anotações do pacote javax.persistence.
Expliquei tudo e disponibilizei o jar e os fontesno post no meu blog, abaixo:
http://lindbergframework.blogspot.com.br/2013/08/como-criar-uma-copia-de-um-objeto.html
Espero ter ajudado