Verständnis-Problem JPA Grundlagen

weeedoo

Mitglied
Hallo zusammen,
ich habe mir in den letzten Tagen JPA Grundlagen angeeignet und dachte dass ich grob wüsste was ich tue, hab nun aber ein blöd elementares Problem.
Ich benutze MySQL und Hibernate, entwickeln tue ich mit Netbeans.

Die Code-Ausschnitte sind quick und dirty entstanden, also sorry für alle StilFauxpas :)

Im ersten Schritt habe ich diverse Entity-Instanzen erstellt und persistent in die DB geschrieben, was auch funktioniert.
Als ich das Programm änderte um ein bisschen mit dem Auslesen und Manipulieren der Datensätze zu spielen, verschwanden alle Datensätze, nur die blanken tables blieben?!
Ich wollte also ganz platt die Generierung der Daten aus der main-Methode rausnehmen und durch manipulierende Anweisungen ersetzen.
Schon das Instanzieren einer EntityManagerFactory genügt um vorher persistente Daten zu löschen.

Meine Vermutung ist (neben der dass ich vor Bäumen den Wald nicht sehe) dass die properties in der persistence.xml falsch sind....oder ich ich irgendetwas ganz wesentliches von JPA nicht checke =)

persistence.xml
Java:
<?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="JPAtest1PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>jpatest1.Computer</class>
    <class>jpatest1.Nutzer</class>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value="XXXXX"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/myDB"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

Entities:
Java:
@Entity
public class Computer implements Serializable {
    
    
    private Long id;
    private String bezeichnung;
    private Nutzer nutzer;

    public String getBezeichnung() {
        return bezeichnung;
    }

    public void setBezeichnung(String bezeichnung) {
        this.bezeichnung = bezeichnung;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @ManyToOne
    @JoinColumn(name="nutzer")
    public Nutzer getNutzer() {
        return nutzer;
    }

    public void setNutzer(Nutzer nutzer) {
        this.nutzer = nutzer;
    }
}

@Entity
public class Nutzer implements Serializable {
    private static final long serialVersionUID = 1L;

    private Long id;
    private String name;
    private int nr;
    private boolean thief;
    private Set<Computer> computer = new HashSet<Computer>();

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNr() {
        return nr;
    }

    public void setNr(int nr) {
        this.nr = nr;
    }

    public boolean isThief() {
        return thief;
    }

    public void setThief(boolean thief) {
        this.thief = thief;
    }

    @OneToMany(cascade = javax.persistence.CascadeType.ALL, mappedBy = "nutzer")
    public Set<Computer> getComputer() {
        return computer;
    }

    public void setComputer(Set<Computer> computer) {
        this.computer = computer;
    }

    public void addComputer(Computer c){
        computer.add(c);
        c.setNutzer(this);
    }


    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Nutzer)) {
            return false;
        }
        Nutzer other = (Nutzer) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "jpatest1.Nutzer[id=" + id + "]"+" Name: "+getName();
    }


}

Main-Methode beim Erstellen der Daten
Java:
public class Main {
    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAtest1PU");
        EntityManager em = emf.createEntityManager();

        Collection<Computer> comps = null;

        Nutzer us1 = new Nutzer();
        Nutzer us2 = new Nutzer();

        us2.setName("odfg");
        us2.setNr(455);
        us2.setThief(false);

        Computer comp11 = new Computer();
        comp11.setBezeichnung("xxspawned");
        us2.addComputer(comp11);
    
        //das ganze ein paar mal für weitere computer-instanzen

        em.persist(us1);
        em.persist(us2);
        EntityTransaction trans = em.getTransaction();
        trans.begin(); 
        trans.commit();
    }
}

Vorige Main geändert in:
Java:
public class Main {


    public static void main(String[] args) {

        //Erste Zeile "genügt" um daten zu löschen
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAtest1PU");

        EntityManager em = emf.createEntityManager();

        Nutzer temp = em.find(Nutzer.class,1L);
        
        temp.setName("Hamal Mashburn");
        em.merge(temp);


    }

}

Ich hoffe jemand kann mir sagen was ich verchecke =)
 
G

Gelöschtes Mitglied 5909

Gast
du weißt wie eine transaktion funktioniert?

Java:
        em.persist(us1);
        em.persist(us2);
        EntityTransaction trans = em.getTransaction();
        trans.begin(); 
        trans.commit();

wenn du mal in die datenbank direkt geschaut hättest, hättest du gesehn dass die daten da nie ankommen

So sollte es funktionieren

Java:
        EntityTransaction trans = em.getTransaction();
        trans.begin(); 
        em.persist(us1);
        em.persist(us2); 
       trans.commit();
 

weeedoo

Mitglied
Danke für die schnelle Antwort, aber das ist es nicht.
Wenn ich das Programm mit der ursprünglichen main-Methode ausführe, stehen danach die Daten so wie sie sollen in der DB - genauso wie mit deiner Code-Veränderung. (Überprüf ich im Dienste Fenster von NetBeans > Daten anzeigen)

Ändere ich danach die main() werden dabei die Datensätze gelöscht, selbst wenn in ihr nichts steht ausser
Java:
public static void main(String[] args) {
   EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAtest1PU");
}
 

weeedoo

Mitglied
Okay, hab's lösen können indem ich als Persistence Library EclipseLink statt Hibernate gewählt habe.

Keinerlei Veränderungen am Code! Ob Netbeans vllt. eine "nicht optimal" konfigurierte persistence.xml für Hibernate
default-mäßig erstellt?
Falls mir jemand sagen kann was in der zuvor geposteten persistence.xml falsch oder fehlend ist, wäre ich sehr
dankbar =) An der Table Generation Strategy kann es nicht liegen, da hab ich Trial'n'Error mäßig alles durchprobiert.
 

weeedoo

Mitglied
Vielleciht mal an der hibernate.hbm2ddl.auto Option fummeln?

ich hatte es mit hibernate.hbm2ddl.validate probiert, da dies die "passivste" Variante ist; auch ohne Erfolg. (Achtung gefährliches Halbwissen: ) Ich vermute bei dem hbm2dll geht es ausschliesslich um den Aufbau der Tabellen und nicht deren Inhalt...natürlich werden andererseits auch die Inhalte gedropped bei einer Veränderung des Schemas...

Naja, ich hab mich entschlossen einfach mit der EclipseLink Library weiter zu arbeiten :oops: und werde den Thread deshalb als erledigt markieren... weitere Lösungsvorschläge würden mich dennoch interessieren :)
Dank an alle
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Eclipselink Lazy Loading und interne iteration Verständnis Datenbankprogrammierung 1
T HSQL: verständnis Frage Datenbankprogrammierung 2
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
S JPA OptimisticLocking Problem Datenbankprogrammierung 11
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben