Kopieren eines Datensatzes

jambusa

Mitglied
Hallo zusammen,

folgendes ist gegeben: Eine Tabelle (mysql) mit etwa 120 Spalten. Diese besitzt einen primary key mit autoincrement und einigen foreign keys auf andere Tabellen. Nun möchte ich in meiner Java-Applikation ermöglichen, diesen Datensatz in identischer Form erneut anzulegen, nur mit einer anderen id (autoincrement).

Nun habe ich ja grundsätzlich 2 Optionen. Entweder lege ich in Java ein neues Domain-Objekt an, weise die entsprechenden werte zu (ggfls über BeanUtils.copyProperties), dann einige Nachbesserungen in den Settern (2 felder unterscheiden sich beim neu anlegen) und saven des Objektes, was vermutlich der elegantere Weg wäre, oder

über einen SQL befehl diesen Datensatz kopieren. Da bin ich auf folgenden Befehl gestoßen:

INSERT INTO TABELLENNAME (SpalteX, SpalteY) SELECT SpalteX, SpalteY FROM TABELLENNAME WHERE ID = " + id

Da ich jedoch nicht 120 Spalten angeben möchte, hab ich mich gefragt, ob ich in MYSQL etwas wie "Alle Spalten bis auf xyz" angeben kann, jedoch würde mich zunächst interessieren, was ihr generell für den besseren Weg haltet und warum. Oder ob ich gar einen ganz anderen Lösungsweg vorgehen sollte.

Grüße,
jambusa
 

Janus

Bekanntes Mitglied
Der Vorteil der reinen SQL Lösung ist, dass ein einziger Befehl genügt, um auch mehrere Zeilen gleichzeitig zu kopieren. Gerade in solchen Fällen ist die Lösung auch wesentlich performanter.
 

jambusa

Mitglied
genau das habe ich mir auch gedacht, da BeanUtils auch beim Zuweisen der Properties schon immer eine kleine Performancebremse beim Beziehen der Daten war.

Müsst ich dann deiner Meinung nach alle 120 Spalten (das Design ist leider so vorgegeben) im SQL Befehl angeben , oder hast du da noch eine Alternative parat? Ich würd ungern immer diesen SQL Befehl mitpflegen, wenn sich an der Tabellenstruktur etwas verändert.
 

jambusa

Mitglied
Danke für den Link, inzwischen konnte ich mir einen entsprechenden SQL String zusammenbasteln. Doch nachdem ich mich nun längere Zeit damit auseinander gesetzt habe, ist mir bewusst geworden, dass das eigentliche Problem die Referenzen der einzelnen Entitäten untereinander sind.

Leider kann ich nicht einfach nen dump der kompletten Datenbank machen, da die Datensätze in die gleichen Tabellen eingefügt werden, daher muss ich mir sowohl die ursprüngliche ID der kopierten Datensätze merken als auch die neu zugewiesene der neuen Datensätze um die Referenzen im Nachhinein wieder herstellen zu können.

Beispiel: Tabelle Wald, Tabelle Baum und Tabelle Blätter. Baum kann mehrere Blätter haben, Blätter haben nur einen Baum. Beim Kopieren der Tabelle Baum, möchte ich natürlich auch die zugehörigen Blätter der Bäume kopieren und in einem neuen Wald ablegen.

Bin das Ganze dann mal iterativ durchgegangen und hab über PropertyUtils.copyProperties() die DomainObjekts kopiert und unter der neuen ID ablegt und dann abgefragt, ob der Baum Blätter hat, und diese dann gleich mit einbezogen und die entsprechenden Referenzen direkt neu gesetzt. Hat auch alles prima geklappt, allerdings dauert das Vorhaben (wie Janus schon angedeutet hat) sehr lang.

Hattet ihr schonmal einen vergleichbaren Fall? Falls ja, für welchen Weg habt ihr euch entschieden? Kann mir Hibernate dort womöglich auch etwas Arbeit abnehmen? Leider hab ich in der Hilfe dazu nichts konkretes gefunden.

Grüße,
jambusa
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H MySQL Werte eines Datensatzes in einen anderen kopieren Datenbankprogrammierung 2
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
L Oracle Daten von einem Server zum andere kopieren Datenbankprogrammierung 24
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
V Datenbanktabelle kopieren Datenbankprogrammierung 2
V Tabelle kopieren (Superbase -> Access) Datenbankprogrammierung 1
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2
S SQL: Spalte kopieren plus Wert erhöhen Datenbankprogrammierung 4
S Tabellen kopieren Datenbankprogrammierung 10
Robert Zenz Aufteilen von Up/Downvotes eines Benutzers in drei Gruppen. Datenbankprogrammierung 0
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
damike84 Hibernate: persistieren eines Graphen Datenbankprogrammierung 2
G Laufzeit eines Algorithmus mittels Big Theta bestimmen Datenbankprogrammierung 5
G ID zuweisung eines TerminKalenders (mehrere Kalender) Datenbankprogrammierung 8
D Hibernate: Zustand eines Objekts erkennen? Datenbankprogrammierung 0
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
J Datenbankeintag eines Warenkorbes funktioniert nicht Datenbankprogrammierung 4
M [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank. Datenbankprogrammierung 3
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
G PostgreSQL Postgre: Passwort eines Benutzers ändern Datenbankprogrammierung 3
D Anzeige wärend des Ausführens eines Statements Datenbankprogrammierung 13
N executeUpdate "innerhalb" eines Resultsets Datenbankprogrammierung 14
S Select eines bestimmten Datensatzes Datenbankprogrammierung 4
R Effiziente Java-Methode zum finden eines freien PK Datenbankprogrammierung 7
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
brainray Bei MySQL alle Datenbanken eines Servers abfragen Datenbankprogrammierung 3
1 User die Rechte eines Datenbankerstellers zuweisen? Datenbankprogrammierung 3
X SQL Abfrage für Ähnlichkeit eines Strings Datenbankprogrammierung 2
B SQL Abfrage. Nur den ersten eines Blocks Datenbankprogrammierung 2
M Passwort eines Technischen Users hinterlegen Datenbankprogrammierung 6
A JPA: Zweite Instanz eines Entitätsobjekts Datenbankprogrammierung 3
M Konvertierung eines Ojects to String Datenbankprogrammierung 3
T Datenbanknamen eines Datenbankservers auslesen Datenbankprogrammierung 9
J Größe eines ResultSets Datenbankprogrammierung 12
G Problem beim Schreiben eines Dateipfads in MySQL-DB Datenbankprogrammierung 9
G Löschen eines Eintrages verbunden mit JList Datenbankprogrammierung 5
F Filtern innerhalb eines Resultset Datenbankprogrammierung 12
W Anzahl der Spalten eines ResultSets bestimmen Datenbankprogrammierung 5
F die DN eines LDAP verzeichnisses abfragen Datenbankprogrammierung 2
B Laden eines JDBC Treiber. Datenbankprogrammierung 7
N Struktur eines Datenbankinterface? Datenbankprogrammierung 7
P Wirkliche Zeilenanzahl eines ResultSets ermitteln Datenbankprogrammierung 22
K frage zum ausführen eines INSERT statements Datenbankprogrammierung 16
K errechnen eines mittelwertes vom jdbc rSet Datenbankprogrammierung 4
M Abfrage trennt Ergbnis eines Atrributes nach den Leerzeichen Datenbankprogrammierung 4
F Abfrage eines DB Feldes aus einer mySQL Datenbank Datenbankprogrammierung 2
K Datenbank eines Forums nutzen Datenbankprogrammierung 11
J Alle Spalten und Zeilen eines ResultSets ausgeben ? Datenbankprogrammierung 2
B Zeilenzahl eines ResultSet ermitteln Datenbankprogrammierung 5
N ID des Datensatzes aus JTable holen (nicht Index!) Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben