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:
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:
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]
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:
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:
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: