2016-07-20 23 views
0

Ich habe eine Tabelle mit einem String-Feld und versuchen, dieses Feld zu aktualisieren und das Update über EntityManager mit der Datenbank zusammenführen. Dies geschieht und ohne exceptio, aber ich sehe keine Auswirkungen auf die Datenbank und keine Ideen, was da oben ist. Hoffe, dass jemand eine Idee hat. Im folgenden Beispiel match != null und mit beiden print-Anweisungen bekomme ich den erwarteten Wert in mein Protokoll geschrieben. Die Zusammenführung innerhalb der Transaktion hat jedoch keine Auswirkungen auf die Datenbank, obwohl die Festschreibung beendet wurde.Zusammenführung ohne Ausnahme, aber ohne Auswirkungen auf die Datenbank Glassfish 4.1 JPA

@Named 
@SessionScoped 
@ManagedBean 
public class LoginController implements Serializable { 

    @PersistenceUnit 
    private EntityManagerFactory emf; 

    public String mymethod(){ 
     ... 
     match.setPwdResetId(rs); 
     System.out.println("reset it is now "+match.getPwdResetId()); 
     try{ 
      ut.begin(); 
      emf.createEntityManager().merge(match); 
      ut.commit(); 
     } 
     catch(Exception e){ 
      FacesMessage m2 = new FacesMessage("Values could not be saved. "); 
      FacesContext.getCurrentInstance().addMessage("ResetForm", m2); 
      System.out.println("exceptio persisting "+e); 
      return "message.jsf"; 
     } 
     System.out.println("reset it is now2 "+match.getPwdResetId()); 
+0

können Sie die Einheit abzulösen und dann verschmelzen? – Apostolos

+0

Ja! Woher wussten Sie? Nach dem Trennen konnte ich sogar zusammenführen und sehe es nun in der Datenbank. Ich würde gerne die Gründe kennen und Ihr Denken lernen. Vielen Dank – Tom

+0

Ich fügte eine Antwort hinzu, um es zusammen mit dem Merge-Teil der jpa-Spezifikation und einem Link zu der gesamten Spezifikation pdf zu akzeptieren. Viel Spaß beim Lesen :) – Apostolos

Antwort

0

Bitte lösen Sie die Einheit und versuchen Sie es erneut. Sie können mehr bei der jpa 2 Spezifikation lesen. Ich poste eine Probe für die Mischoperation:

Die Semantik der Operation merge auf eine Einheit angewendet X wie folgt:

  • Wenn X eine freistehende Einheit ist, wird der Zustand von X ist, kopiert auf eine bereits existierende verwaltete Entitätsinstanz X 'derselben Identität oder eine neue verwaltete Kopie X' von X wird erstellt.

  • Wenn X eine neue Entitätsinstanz ist, wird eine neue verwaltete Entitätsinstanz X 'erstellt und der Status von X in die neue verwaltete Entität
    Instanz X' kopiert.

  • Wenn X eine entfernte Entitätsinstanz ist, wird eine IllegalArgumentException durch die Zusammenführungsoperation ausgelöst (oder das Transaktions-Commit schlägt fehl
    ).

  • Wenn X eine verwaltete Einheit ist, ist es durch die Zusammenführung ignoriert wird, jedoch wird der Druckvorgang an Einheiten von
    Beziehungen von X referenziert kaskadiert, wenn diese Beziehungen mit
    der Kaskade Elementwert-Kaskade mit Anmerkungen versehen sind = MERGE oder cascade = ALL-Annotation.

  • Für alle Entitäten Y von Beziehungen von X referenziert das Kaskadenelement Wert Kaskade mit = fusionieren oder kaskaden = ALL wird Y
    rekursiv als Y‘zusammengeführt. Für alle Y, die mit X bezeichnet sind, wird X 'auf
    Referenz Y' gesetzt. (Wenn X verwaltet wird, dann ist X das gleiche Objekt wie X '.)

  • Wenn X eine mit X' verschmolzene Entität ist, mit einem Verweis auf eine andere Entität Y, wobei cascade = MERGE oder cascade = ALL dann
    Navigation von der gleichen Vereinigung von X ‚ergibt sich ein Verweis auf eine
    verwalteten Objekts Y‘ mit der gleichen Identität wie persistent Y. nicht

die Persistenz Provider muss keine Felder fusionieren LAZY angegebenen gekennzeichnet das hat nicht abgerufen: es muss solche Felder beim Zusammenführen ignorieren. Alle von der Entität verwendeten Spalten der Version müssen durch die Persistenzlaufzeitumgebung Implementierung während der Zusammenführungsoperation und/oder bei der Flush- oder Festschreibung Zeit überprüft werden. Wenn keine Versionsspalten vorhanden sind, wird keine zusätzliche Version überprüft, die während der Merge-Operation durch die Laufzeit des Persistenzanbieters überprüft wird.

Sie die ganze pdf finden here

+0

Danke. Ich verstehe das nicht wirklich. Aus welchem ​​Grund wird eine verwaltete Entität ignoriert? Ist der falsche Befehl für eine SQL-Aktualisierungsabfrage zusammengeführt? Es scheint merkwürdig, dass der richtige Weg ist, sich zu trennen und dann zu verschmelzen, oder bekomme ich das Konzept nicht? – Tom