Persistenz mit JPA oder Hibernate

Status
Nicht offen für weitere Antworten.

peez

Bekanntes Mitglied
Ich habe gerade eine Desktop Anwendung, wo ich mich mal in einem der Persistenz-Frameworks versuchen möchte.
Leider komme ich weder mit JPA noch mit Hibernate derzeit zum Ziel ;-)

Bei JPA scheitert es schon am Runterladen der entspr. Implementierung. Der Download-Link im Tutorial von Sun (Using the Java Persistence API in Desktop Applications) passt nicht und sonst finde ich keine Infos darüber im Netz. Wisst ihr, wo man die offizielle Implementierung bekommen kann?

Mit Hibernate scheitert es an slf4j, der auch irgendeine Implementierung erwartet, ich möchte aber auf keinen Fall auch noch log4j mit in die Anwendung aufnehmen...

Diese Fehlermeldung gibts:
Code:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: See [url=http://www.slf4j.org/codes.html#StaticLoggerBinder]SLF4J Error Codes[/url] for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

Binde ich die Implementierung slf4j-nop-1.5.8.jar in den Classpath ein, kommt diese Exception:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/map/LRUMap

Was mache ich falsch?
Mir ist egal welches der Frameworks ich benutze. Hauptsache endlich eines ;-)
 
M

maki

Gast
Bei JPA scheitert es schon am Runterladen der entspr. Implementierung.
Scherzkeks :D
Eine Implementierung von JPA ist Hibernate, eine andere EclipseLink (mein Favourit), noch eine andere ist Datanucleus...

Mit Hibernate scheitert es an slf4j, der auch irgendeine Implementierung erwartet, ich möchte aber auf keinen Fall auch noch log4j mit in die Anwendung aufnehmen...
Allein für Hibernate brauchst du fast 2 dutzend JArs, da kommt es auf log4j nicht mehr an, dazu kommt das log4j wohl das beste Loggingframework ist, also vergiss deine vorbehalte gegenüber log4j.

Würde die EclipseLink empfehelen, ist imho einfacher zu konfigurieren, ach ja, EclipseLink wird die Referenzimplementierung für JPA 2.0.
 

peez

Bekanntes Mitglied
Ah - man lernt nie aus ;-)

Also ich habe mir jetzt Eclipselink geladen und versucht, eine ganz einfache Klasse zu speichern. Leider bekomme ich folgende Exception:
Code:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named db

Die Einstellungen etc. dürften korrekt sein.

persistence.xml (liegt in src/META-INF)
[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="db" transaction-type="RESOURCE_LOCAL">

<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<class>de.jpaTest.Person</class>
<properties>

<property name="toplink.jdbc.user" value="peez"/>
<property name="toplink.jdbc.password" value=""/>
<property name="toplink.jdbc.url" value="jdbc:mysql://192.168.0.10/test"/>

<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>

</persistence-unit>
</persistence>
[/XML]

POJO:
Java:
package de.jpaTest;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Person {
  
  @Id
  @GeneratedValue
  private int id;
  
  private String vorname;
  private String nachname;
  
  public Person() {
    
  }
  
  
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getVorname() {
    return vorname;
  }
  public void setVorname(String vorname) {
    this.vorname = vorname;
  }
  public String getNachname() {
    return nachname;
  }
  public void setNachname(String nachname) {
    this.nachname = nachname;
  }
}

Main-Klasse:
Java:
package de.jpaTest;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Test {

  /**
   * @param args
   */
  public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("db");
    EntityManager em = emf.createEntityManager();
    
    em.getTransaction().begin();
    
    Person p = new Person();
    p.setVorname("Philipp");
    
    em.persist(p);
    
    em.getTransaction().commit();
    
    em.close();
    emf.close();


  }

}
 
M

maki

Gast
Der Provider sollte
[xml]<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>[/xml]
lauten, TopLink ist tot, heisst jetzt EclipseLink ;)

Nachtrag: Das gilt auch die die Properties.
 

-MacNuke-

Bekanntes Mitglied
Mit Hibernate scheitert es an slf4j, der auch irgendeine Implementierung erwartet, ich möchte aber auf keinen Fall auch noch log4j mit in die Anwendung aufnehmen...

Dann kannst du slf4j-jdk4 nutzen. Das nutzt die, ziemlich beschränkten, Logging-Funktionalitäten von Java direkt (so wie auch EclipseLink).

slf4j ist an sich eine schöne Sache, in Verbindung mit log4j. Weil spätestens wenn die Anwendungen auf anderen Rechnern laufen soll, fragst du dich wo deine ganzen Programmausgaben (u.a. die Logs, falls mal eine Abfrage/Aktualisierung der Datenbank schief geht) hin sollen. Oder warum die Anwendung auf dem einen Rechner plötzlich abschmiert.

Wenn du jetzt sagst, alles in eine Datei, dann fragst du dich später, wie du verhindern kannst, dass sich die Datei nach 1 Monat Nutzung auf >100MB aufbläst.

Für all das hat log4j eine schöne Lösung und dank slf4j programmiert man nicht mal direkt gegen log4j.
 

peez

Bekanntes Mitglied
Weil spätestens wenn die Anwendungen auf anderen Rechnern laufen soll, fragst du dich wo deine ganzen Programmausgaben (u.a. die Logs, falls mal eine Abfrage/Aktualisierung der Datenbank schief geht) hin sollen. Oder warum die Anwendung auf dem einen Rechner plötzlich abschmiert.

Genau dafür habe ich mir vor längerer Zeit schon eine eigene Logger-Klasse gebaut, die auch System.out / System.err abgreifen kann und so alles, was irgendwie ausgegeben wird, auch mitschreibt. Um die Dateigröße kümmert sie sich auch.
Und da die schon alles tut was ich brauche, bin ich immer froh, wenn ich mir log4j sparen kann.
 

byte

Top Contributor
Nur blöd, dass die meistens Libraries gegen die Apache Commons Logging API oder gegen die SLF4J API implementieren, statt Sysouts zu machen. Loggt das Dein Logger auch? Wenn nicht, ist es unbrauchbar.
 
M

maki

Gast
Diese ganze Java "Logging Framework Szene" ist lächerlich, eine richtige Implementierung reicht, kein Grund seine eigene schlechtere nochmals zu schreiben.

Werde nie nachvollziehen können warum log4j nicht der Standard geworden ist, was ich aber noch weniger verstehe ist, warum Leute ihre eigene schreiben müssen die weniger kann...
 

-MacNuke-

Bekanntes Mitglied
Genau dafür habe ich mir vor längerer Zeit schon eine eigene Logger-Klasse gebaut, die auch System.out / System.err abgreifen kann und so alles, was irgendwie ausgegeben wird, auch mitschreibt.

Du weißst aber schon, dass man auch so einfach System.out und System.err umleiten kann? ;) Kein Grund deswegen gleich eine komplette Logging-Funktionalität zu bauen.
 
Zuletzt bearbeitet:

peez

Bekanntes Mitglied
Diese ganze Java "Logging Framework Szene" ist lächerlich, eine richtige Implementierung reicht, kein Grund seine eigene schlechtere nochmals zu schreiben.

Werde nie nachvollziehen können warum log4j nicht der Standard geworden ist, was ich aber noch weniger verstehe ist, warum Leute ihre eigene schreiben müssen die weniger kann...

Das Teil habe ich noch gebaut lange bevor ich von log4j etc. gewusst habe... Ich benutze es eben weil ich es schon immer benutzt habe ;-)
Aber wenn ihr schon so drüber herzieht, überlege ich mir vielleicht doch mal, log4j zu benutzen ;-)

Lässt sich mit log4j denn auch der Sysout abgreifen? Alle meine Klassen schreiben nämlich normal auf die Konsole...
 
M

maki

Gast
Wir haben alle schon mal das Rad neu erfunden, aber eckig.. ;)
Deswegen erst suchen bevor man etwas selber neu erfindet

Alle meine Klassen schreiben nämlich normal auf die Konsole...
Aua.. ist nicht empfehlenswert, aus mehreren Gründen.
 

-MacNuke-

Bekanntes Mitglied
Lässt sich mit log4j denn auch der Sysout abgreifen?

Von PrintStream erben und die entsprechenden Methoden implementieren und das dann auf Out und Err setzen.

Alle meine Klassen schreiben nämlich normal auf die Konsole...

Das ist schon mal schlecht. ;)

Bei slf4j und log4j kannst du beim loggen eine Klasse übergeben und dann zeigt er dir im Log sogar die Zeilennummer an. Toll was? ;)

Nimm einfach slf4j und gut ist. Dann hast du alles unter einem Hut.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Persistenz API Datenbankprogrammierung 3
M Persistenz für kleines Projekt Datenbankprogrammierung 11
krgewb Hibernate: Fremdschlüssel wird nicht erzeugt Datenbankprogrammierung 2
torresbig MySQL hibernate - could not resolve entity class ... (Datenbank Anfänger) Datenbankprogrammierung 19
I Hibernate Predicate mit IN Clause "Unaware how to convert value to requested type" Datenbankprogrammierung 0
T org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session Datenbankprogrammierung 5
T Realisierungsvorschläge Hibernate SQL Datenbankprogrammierung 1
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Tabellen-Erzeugung via Hibernate ignoriert 'CascadeType' settings Datenbankprogrammierung 1
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
damike84 Hibernate: persistieren eines Graphen Datenbankprogrammierung 2
N Hibernate Entitäten bei Selects aus 2 Tabellen Datenbankprogrammierung 7
OnDemand Hibernate Realationen Datenbankprogrammierung 7
OnDemand Hibernate ManyToOne Datenbankprogrammierung 5
D Hibernate oneToMany Syntaxfehler Datenbankprogrammierung 3
D Hibernate Error: NoSuchMethodError Datenbankprogrammierung 4
D hibernate mit postgreSQL Datenbankprogrammierung 3
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
OnDemand MySQL Trigger löst nicht aus bei Hibernate Update Datenbankprogrammierung 12
OnDemand Hibernate OneToMany ManyToOne Datenbankprogrammierung 61
J Hibernate One-To-One mit Where Klausel Datenbankprogrammierung 6
L hibernate.cfg.xml Could not parse configuration Datenbankprogrammierung 0
L H2 Hibernate definieren? Datenbankprogrammierung 1
T JPA Mapping Enum (hibernate 5) Datenbankprogrammierung 1
H In hibernate.cfg.xml schreiben und auslesen Datenbankprogrammierung 0
K Hibernate: Ein Fluch Datenbankprogrammierung 3
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
S JpaRepositories & Hibernate: ungewolltes trim() in findBy Datenbankprogrammierung 7
S MySQL hibernate exception: illegal state exception : entityManagerFactory is closed Datenbankprogrammierung 5
S Hibernate: Verschiedene Klassen zurückgeben. Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
perlenfischer1984 Hibernate mit final members Datenbankprogrammierung 3
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
N Sqlite3 und Hibernate Datenbankprogrammierung 3
A Hibernate Cache leeren Datenbankprogrammierung 4
I MySQL Hibernate zu viele Queries Datenbankprogrammierung 2
Psypsy Hibernate / JPA erkennen von schon gespeicherten Objekten Datenbankprogrammierung 4
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
J Hibernate + DTOs - DTOs in DAOs verwenden? Datenbankprogrammierung 1
S Hibernate-Konfiguration : Unverständliche Ausgabe beim Ausführen Datenbankprogrammierung 0
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
J Hibernate + HSQL embedded Datenbankprogrammierung 2
P Hibernate Einstieg Datenbankprogrammierung 5
C Hibernate und createQuery Datenbankprogrammierung 2
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Datenbankprogrammierung 4
G H2 Hibernate - wie joins machen Datenbankprogrammierung 1
D Hibernate: Zustand eines Objekts erkennen? Datenbankprogrammierung 0
D Unterschiede Hibernate Vs. Java Persistence API Datenbankprogrammierung 8
I Hibernate / JPA Index hinzufügen Datenbankprogrammierung 1
X Hibernate Cache Verständnisproblem Datenbankprogrammierung 0
T Hibernate und inner class Datenbankprogrammierung 0
K n:m Tabellen mit Hibernate erstellen Datenbankprogrammierung 1
T Hibernate DAO gute Tutorials/Bücher gesucht Datenbankprogrammierung 0
C Hibernate: could not resolve property Datenbankprogrammierung 1
J Plug-In-Framework für Hibernate-Klassen Datenbankprogrammierung 0
M Hibernate - Save Child wenn nötig Datenbankprogrammierung 10
M DAO's + Hibernate Theorie Datenbankprogrammierung 4
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F Hibernate - verschiedene Schemen Datenbankprogrammierung 7
D Hibernate SaveOrUpdate Exception Datenbankprogrammierung 2
D Hibernate CreateQuery ohne Result Datenbankprogrammierung 7
E MySQL Hibernate mit JaxWS führt zu LazyInitialization Exception Datenbankprogrammierung 8
L Einarbeitung in Hibernate -> wenn gute SQL Kenntnisse vorhanden? Datenbankprogrammierung 2
B DB2 Hibernate findet Datenbank nicht Datenbankprogrammierung 18
K JPA / Hibernate Annotations Datenbankprogrammierung 4
M JPA / Hibernate mit Postgres DB Datenbankprogrammierung 3
P JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt Datenbankprogrammierung 3
E MySQL Hibernate ( Anfänger ) Datenbankprogrammierung 3
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
M Hibernate Foreign Key definieren Datenbankprogrammierung 4
M Abstrakte Klassen Hibernate Datenbankprogrammierung 4
D Mit Hibernate (mit Annotation) auf Views zugreifen Datenbankprogrammierung 2
M [Hibernate]Abgleich eines lokalen Objekts mit dem Zustand aus der Datenbank. Datenbankprogrammierung 3
P Mit Hibernate mehrere Datensätze löschen Datenbankprogrammierung 7
P Probleme mit meinem 1. Hibernate Beispiel Datenbankprogrammierung 3
P erste Schritte mit Hibernate Datenbankprogrammierung 3
V Hibernate Interfaces von anderem Projekt Datenbankprogrammierung 2
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
B Hibernate und portierbare Datenbank Datenbankprogrammierung 3
qwerqer [Hibernate] Mappingvarianten Datenbankprogrammierung 2
lumo Teneo Hibernate & JPA Datenbankprogrammierung 15
Z JPA mit Hibernate - Unable to build EntityManagerFactory Datenbankprogrammierung 7
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
K Hibernate vs. JDBC Datenbankprogrammierung 4
J Hibernate Info 593 ? Datenbankprogrammierung 4
J Erstellen der SessionFactory in Hibernate 4.1 Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
X MySQL Hibernate: Massenupdate auf unbekannte Tabelle Datenbankprogrammierung 4
N hibernate: datasource Datenbankprogrammierung 7
H MySQL Hibernate: Updaten vereinfachen Datenbankprogrammierung 2
T Hibernate Division zweier Summen Datenbankprogrammierung 4
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4

Ähnliche Java Themen


Oben