JPA Änderungen werden nicht gespeichert

Dieses Thema JPA - Änderungen werden nicht gespeichert im Forum "Data Tier" wurde erstellt von Noisefever, 14. Mai 2014.

Thema: Änderungen werden nicht gespeichert Hallo allerseits! Ich verzweifle an diesem Problem! Ich möchte mit OpenJPA in eine Datenbank speichern. Das hat...

  1. Hallo allerseits!

    Ich verzweifle an diesem Problem! Ich möchte mit OpenJPA in eine Datenbank speichern. Das hat anfangs wunderbar geklappt, aber dann hab ich das Enhancen der Klassen eingerichtet (also beim Builden, nicht mehr zur Laufzeit). Und plötzlich werden keine Änderungen mehr angenommen. Einfügen geht, Löschen geht. Aber nicht ändern. Nichtmal beim supereinfachen Test:

    Code (Java):

    public void test(){
            EntityManagerFactory emf = Persistence.createEntityManagerFactory(Datenbankname);
            EntityManager em = emf.createEntityManager();
            em.getTransaction().begin();
            User user = em.find(User.class, 10);
           
            System.out.println(user.username);
            user.password = "12345";
            em.persist(user);
            System.out.println("Before: "+user.password);
            em.getTransaction().commit();
            em.refresh(user);
            em.close();
            emf.close();
            System.out.println("After: "+user.password);
        }
     
    Konkret passiert da folgendes:
    Der User mit ID 10 wird geladen. Er hat kein Passwort. Ich ändere das Passwort. Ich gebe es zur Kontrolle aus. Er gibt 12345 korrekt aus. Ich speichere es sogar nochmal em.persist() ab - was ja ansich garnicht nötig ist. Dann commite ich es. Kaum refreshe ich ist das Passwort wieder leer.

    Also das gibts doch garnicht oder? Was läuft denn hier falsch? :autsch:
    Wie gesagt: enhance ich nicht beim Builden funktioniert das. Ich kann aber nicht auf das enhancen verzichten.

    Ich bin für jede Hilfe dankbar!

    Ach ja, die Klasse User:

    Code (Java):

    @Entity(name = "Users")
    public class User {
        @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
        public int id;
        @Column(nullable = false, length = 50)
        public String username;
        @Column(nullable = true, length = 150)
        public String password;
    }

     
    und die persistence.xml:

    [XML]
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="Subsystem" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>dataclasses.User</class>
    <properties>
    <property name="openjpa.ConnectionDriverName" value="net.sourceforge.jtds.jdbc.Driver" />
    <property name="openjpa.ConnectionURL" value="jdbc:jtds:sqlserver://server/database" />
    <property name="openjpa.ConnectionUserName" value="xxxxx" />
    <property name="openjpa.ConnectionPassword" value="xxxxx" />
    <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
    <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
    </properties>
    </persistence-unit>
    </persistence>
    [/XML]
     
    Zuletzt bearbeitet: 14. Mai 2014
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. ehrlich, keiner?
     
  4. Okay ich habs gefunden. Wens interessiert:

    Scheinbar wird Field Access nach dem Enhancen nicht mehr wahrgenommen, nur noch Property Access (Getter&Setter). Stehen tut das aber irgendwie nirgends - oder ich bin zu blöd das zu finden.

    Super, so kann man Zeit auch totschlagen.
     
  5. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!