Was ist der beste Weg, um Datensätze in der gleichen Tabelle zu kopieren?Wie kopiert man den Datensatz mit Hibernate (in Java)?
So etwas:
Address address = AddressDAO.get(id);
address.setId(null);
AddressDAO.add(address);
Was ist der beste Weg, um Datensätze in der gleichen Tabelle zu kopieren?Wie kopiert man den Datensatz mit Hibernate (in Java)?
So etwas:
Address address = AddressDAO.get(id);
address.setId(null);
AddressDAO.add(address);
Es würde funktionieren, aber es ist am besten, wenn Sie Ihre Absicht (Klonen) in Ihrem Domain-Modus ausdrücken. Das Setzen eines Feldes auf null ist nur ein Implementierungsdetail und hat keine Bedeutung.
Address address = AddressDAO.get(id);
Address clone = address.cloneMe();
AddressDAO.add(clone);
Ja, das sollte funktionieren.
Ich bin nicht sicher, ob Hibernate nicht Objektreferenzen nicht überprüft, so dass, wenn dies nicht funktioniert, könnte eine neue Instanz erstellen müssen, und kopieren Sie alle Eigenschaften (mit BeanUtils.copyProperties
oder sogar BeanUtils.cloneBean(..)
), und legen Sie die ID auf null/0.
Ich schlage vor, dass Sie es versuchen. Wenn adress
immer noch persistent (Session-gebunden) ist, würde ich davon ausgehen, dass es Probleme geben wird. Möglicherweise benötigen Sie eine session.evict(address)
, bevor Sie die ID auf null setzen.
Dadurch wird keine tiefe Kopie erstellt ... also bezieht sich Ihre Kopie auf Kinderobjekte von Originalobjekten.
Verwenden Sie Kaskade Evict für das Objekt im Ruhezustand.
dann
Address address = AddressDAO.get(id);
AddressDAO.evict(address); //Internally session.evict(address);
address.setId(null); // If id is autogenerated
AddressDAO.add(address);
Das Problem ich damit sehen, dass, wenn address.cloneMe() nur die ID auf NULL setzt, der Methodenname ist ein liegen. Der Aufruf selbst erzeugt keinen Klon, es ist immer noch das gleiche Objekt. – waxwing
Es ist eine Klon-Methode. Das ursprüngliche Objekt ist nicht betroffen. Es gibt eine neue Instanz zurück. Sie könnten es als Kopierkonstruktor ausdrücken, aber ich bevorzuge die Ausdruckskraft einer (benannten) Methode dafür. – cherouvim