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()
Espero que tenha explicado de forma mais objetiva agora.
Obrigado, desde já.
R
Rodrigo_Sasaki
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.
J
jeroqueiroz
Valeu a segunda opção foi a que também pensei, mas vou optar pela 1ª opção que mostrou…
vlw!
R
Rodrigo_Sasaki
jeroqueiroz:
Valeu a segunda opção foi a que também pensei, mas vou optar pela 1ª opção que mostrou…
vlw!
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.
J
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.
H
Hebert_Coelho
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.
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.
J
jeroqueiroz
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.
H
Hebert_Coelho
Faça tipo assim:
publicclassDog{publicDogduplicate(){Dogdog=newDog();dog.setNome(this.nome);// coloca tudo q é devidoreturndog;}}//e na hora de usarentityManager.save(dog1);Dogdog2=dog1.duplicar();entityManager.save(dog2);
J
jeroqueiroz
ok, vou testar aqui…
Obrigado!
L
lindberg713
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: