thomasvonkapellen
Grünschnabel
Hallo,
ich verwende in einer Swing-Anwendung das JPA in Verbindung mit Hibernate. Auf einem FrameView befindet sich eine JTable Komponente, die über ein List- und Query Element mit der Datenbank verbunden ist.
Als IDE verwende ich Netbeans und ich habe zu Testzwecken eine Desktop-Datenbankanwendung per Wizard erstellt und habe einen Button den unten stehenden Quellcode ergänzt.
Es existiert eine Entität "Kontakte", die die Eigenschaften Name1, Name2 etc. hat.
In der JTable soll nun ein Datensatz ausgewählt werden, per NativeQuery - sozusagen an der Entität vorbei - auf Knopfdruck geändert werden und in der Tabelle aktualisiert werden.
Die Aktualisierung nehme ich mit der refresh-Methode, die auch funktioniert, aber es wird weiterhin in Tabelle der alte Wert angezeigt, obwohl die AKtualisierung selber funktioniert hat.
Hier ist der entscheidende Codeabschnitt:
Habe mir auch schon den mit Netbeans automatisch generierten Code angeschaut, hier wird ein list.clear() aufgerufen und der gesmte Inhalt neu aufgebaut, was allerdings viel Zeit kostet .
Offensichtlci habe ich da ein Verständnisproblem mit der Funktionsweise des JPA, vielleicht kann mit ja jemand weiterhelfen
.
Im voraus vieln Dank
Thomas
ich verwende in einer Swing-Anwendung das JPA in Verbindung mit Hibernate. Auf einem FrameView befindet sich eine JTable Komponente, die über ein List- und Query Element mit der Datenbank verbunden ist.
Als IDE verwende ich Netbeans und ich habe zu Testzwecken eine Desktop-Datenbankanwendung per Wizard erstellt und habe einen Button den unten stehenden Quellcode ergänzt.
Es existiert eine Entität "Kontakte", die die Eigenschaften Name1, Name2 etc. hat.
In der JTable soll nun ein Datensatz ausgewählt werden, per NativeQuery - sozusagen an der Entität vorbei - auf Knopfdruck geändert werden und in der Tabelle aktualisiert werden.
Die Aktualisierung nehme ich mit der refresh-Methode, die auch funktioniert, aber es wird weiterhin in Tabelle der alte Wert angezeigt, obwohl die AKtualisierung selber funktioniert hat.
Hier ist der entscheidende Codeabschnitt:
Code:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// index des gwählten datensatzes in der jtable
int selected = masterTable.getSelectedRow();
EntityTransaction tx = entityManager.getTransaction();
if (tx.isActive())
tx.commit();
// änderung eines wertes per native query
tx.begin();
Query qry;
String sqlString="UPDATE kontakte SET name1=\"geänderter Name\" WHERE ktid="+ list.get(selected).getKtid();
qry=entityManager.createNativeQuery(sqlString);
qry.executeUpdate();
// namensänderung wird hier in db eingetragen!!
tx.commit();
// neue transaktion starten
tx.begin();
// listenelemente sind vom typ Kontakte
Kontakte k = list.get(selected);
// aktualisierung des datensatzes
entityManager.refresh(k);
// aktualisierung hat stattgefunden, der entity manager
// hat ein sql select-statement abgeschickt
// und der geänderte wert wird ausgegeben
System.out.println(k.getName1());
// im jtable, das mit der list verbunden ist,
// wird der alte wert angezeigt
list.add(0,k);
// später sollte es für die Aktualisierung heissen:
// list.set(k);
// hier wird der geänderte wert ausgegeben
System.out.println(k.getName1());
}
Habe mir auch schon den mit Netbeans automatisch generierten Code angeschaut, hier wird ein list.clear() aufgerufen und der gesmte Inhalt neu aufgebaut, was allerdings viel Zeit kostet .
Offensichtlci habe ich da ein Verständnisproblem mit der Funktionsweise des JPA, vielleicht kann mit ja jemand weiterhelfen

Im voraus vieln Dank
Thomas