Mein Projekt ist in der StandAllone Version bis auf ändern und löschen der Datensätze fertig geworden.
Und genau an den zwei Punkten, genauer an Änderungen an Datensätzen hab ich wieder ein Problem.
Ich hoffe die CodeTeile reichen um mein Problem zu verstehen. Erstmal in Text Form.
Ich habe eine JTabel, die von einem AbstractTabelModel ihre Daten kriegt. Klappt bis hier hin. Jetzt habe ich ein ActionEvent per Doppelklick auf die Tabel, welche mir ein JDialog öffnet, um änderungen an der gewälten Zeile(DatenSatz) vorzunehmen, klappt auch. Wenn ich jetzt im JDialog den Datensatz ändere, wird der mir auch sofort in der Tabel mit den neuen Werten angezeigt. (aktualisiert durch refresh Methode). Wiederhole ich diesen Vorgang ein zweites Mal, liefert mir die JTabel nicht den alten Wert. Sprich UpdateVorgang funktioniert nur einmal.
Also wie gesagt, beim ersten öffen des JDialog funktioniert alles, beim zweiten öffen des JDialog, wir zwar in MySql aktualiesiert, aber die Tabel, sprich das TabelModel, wie auch die RaumList liefert mir noch den alten Wert zurück (aus dem speicher, oder woher auch immer).
Hatte richtung em.flush() versuche angestellt, aber ergebnislos.
Wo liegt das Problem, dass er beim zweiten mal mit der ManagerAbfrage, "public List alleRaum()", mir die original und nicht die geänderten Daten liefert ?
Jetzt die Codes
Die UpdateMethode aus dem Manager
Die Abfrage Methode aus dem Manager:
Mit dem system.out hatte ich geprüft, was nach dem zweiten Update Vorgang, in der raumList vorhanden ist. Und diese raumList liefert mir nach dem zweiten Updatevorgang den OriginalWert zurück
Die Refresh Methode aus dem AbscractTabelModel:
Und zu guter Letzt noch der Aufrauf der Ändern Methode, im JDialog
Und genau an den zwei Punkten, genauer an Änderungen an Datensätzen hab ich wieder ein Problem.
Ich hoffe die CodeTeile reichen um mein Problem zu verstehen. Erstmal in Text Form.
Ich habe eine JTabel, die von einem AbstractTabelModel ihre Daten kriegt. Klappt bis hier hin. Jetzt habe ich ein ActionEvent per Doppelklick auf die Tabel, welche mir ein JDialog öffnet, um änderungen an der gewälten Zeile(DatenSatz) vorzunehmen, klappt auch. Wenn ich jetzt im JDialog den Datensatz ändere, wird der mir auch sofort in der Tabel mit den neuen Werten angezeigt. (aktualisiert durch refresh Methode). Wiederhole ich diesen Vorgang ein zweites Mal, liefert mir die JTabel nicht den alten Wert. Sprich UpdateVorgang funktioniert nur einmal.
Also wie gesagt, beim ersten öffen des JDialog funktioniert alles, beim zweiten öffen des JDialog, wir zwar in MySql aktualiesiert, aber die Tabel, sprich das TabelModel, wie auch die RaumList liefert mir noch den alten Wert zurück (aus dem speicher, oder woher auch immer).
Hatte richtung em.flush() versuche angestellt, aber ergebnislos.
Wo liegt das Problem, dass er beim zweiten mal mit der ManagerAbfrage, "public List alleRaum()", mir die original und nicht die geänderten Daten liefert ?
Jetzt die Codes
Die UpdateMethode aus dem Manager
Java:
public Object updateRaum(int id, String raumName, String raumBemerkung) {
Raum raum = (Raum) em.find(Raum.class, id);
if (raum != null) {
raum.setRaumName(raumName);
raum.setRaumBemerkung(raumBemerkung);
em.getTransaction().begin();
em.persist(raum);
em.getTransaction().commit();
return raum;
}
return -1;
}
Mit dem system.out hatte ich geprüft, was nach dem zweiten Update Vorgang, in der raumList vorhanden ist. Und diese raumList liefert mir nach dem zweiten Updatevorgang den OriginalWert zurück
Java:
public List alleRaum() {
List<Raum> raumList = new ArrayList<>();
raumList = em.createQuery("SELECT r FROM Raum r").getResultList();
for (int i = 0; i < raumList.size(); i++) {
System.out.println("nach" + raumList.get(i).getRaumBemerkung());
}
return raumList;
}
Java:
public void refresh() {
raumList = man.alleRaum();
fireTableDataChanged();
}
Java:
private void jButtonDialogÄndernActionPerformed(java.awt.event.ActionEvent evt) {
man.updateRaum( (Integer.parseInt(jLabelDialogId.getText())), jTextFieldDialogName.getText(), jTextAreaDialogBem.getText() );
model.refresh();
jDialogEditRaum.dispose();
// TODO add your handling code here:
}