# Tutorial: Hibernate mit MySQL (erste Schritte)



## neurox (17. Okt 2009)

Hallo allerseits,

ich habe ein Einsteigertutorial für all diejenigen geschrieben, die noch nie mit Hibernate in Berührung gekommen sind, aber nun endlich mal reinschnuppern möchten.

Als ich selber damit angefangen habe, bin ich immer wieder über die etwas lückenhafte Beschreibung, auch hinsichtlich der benötigten JAR-Files, in manchen Tutorials gestolpert. Andere waren dann wiederum zu umfangreich und haben Themen mit eingebracht, die mit meinem Kernproblem nichts zu tun haben.

Wer also Interesse hat, ist herzlich eingelanden mal einen Blick auf das Tutorial unter blog.buhbuhbuh.de zu werfen.

Für Anregung und Kritik bin ich selbstverständlich immer Dankbar.

Viele Grüße
neurox


----------



## Quurks (14. Nov 2009)

SChön geworden, allerdings sollte man den Code einrücken


----------



## L-ectron-X (14. Nov 2009)

Ich habe dir mal hier einen Platz in den Tutorials unserer Benutzer reserviert.


----------



## neurox (15. Nov 2009)

L-ectron-X hat gesagt.:


> Ich habe dir mal hier einen Platz in den Tutorials unserer Benutzer reserviert.



Freut mich! Habe auch noch ein paar Tut's in Planung.

Grüße
neurox


----------



## NatGro (16. Nov 2009)

Hallo Neurox,

ich würde mich gern mit Hilfe Deines Tutorials in Hibernate einarbeiten.

Ich besitze bisher nur Grundlagenwissen in Java.
Eclipse habe ich mir bereits installier und es läuft auch soweit.
(Die "Hello Word!" Ausgabe erscheint auf meiner Console)! 

Mit dem Tutorial auf http://docs.jboss.org komme ich ehrlich gesagt nicht so zurecht und ich hoffe Du kannst mir vielleicht weiterhelfen?

Du schreibst:






Woher hole ich mir diese?
Muss ich die einzeln zusammengooglen oder gibt es die als Paket irgendwo?


----------



## neurox (16. Nov 2009)

NatGro hat gesagt.:


> Muss ich die einzeln zusammengooglen oder gibt es die als Paket irgendwo?



Die wirst Du Dir leider zusammensuchen müssen. Ich hatte mir schon überlegt, diese auf meinem Server zum Download bereit zu stellen. Allerdings hatte ich dann doch die Sorge, dass ich damit gegen irgendwelche Lizenzbedingungen verstoße. Das ist auch der Grund, weshalb es die nicht im Bundle gibt.

Für die meisten Anfänger ist es schon ein Problem überhaupt mal eine Liste zu finden, in denen die ganzen benötigten JARs aufgeführt sind, deshalb denke ich mal, dass Du schon einen ganzen Schritt weiter sein wirst, Du Dir die Files von der Liste einfach mal zusammen suchst.

Vielleicht kannst Du für die Nachwelt ja auch mal eine Liste mit Deeplinks erstellen. Wenn Du sie mir schickst, dann werde ich sie gerne verlinken.

Grüße
neurox


----------



## Java@home (16. Nov 2009)

Klasse, ich beschäftige mich zZ mit Datenbanken und MySQL und schaue mir das auf jeden Fall an!


----------



## NatGro (16. Nov 2009)

Du schreibst: _*Beschafft euch diese bitte und legt sie in den Klassenpfad der Anwendung. *_

Kannst du mir sagen, wo ich diese unter Eclipse dann hinlegen muss?
In den Ordner in dem sich meine eigene Main-Klasse befindet?

Edit:
Würde es so genügen:
"Project->Properties->Java Build Path->Libaries->Add External jars" ?




neurox hat gesagt.:


> Vielleicht kannst Du für die Nachwelt ja auch mal eine Liste mit Deeplinks erstellen. Wenn Du sie mir schickst, dann werde ich sie gerne verlinken.



Hier schonmal die ersten die ich bisher finden konnte:
http://mirrors.ibiblio.org/pub/mirrors/maven/antlr/jars/antlr-2.7.6.jar
http://mirrors.ibiblio.org/pub/mirr...llections/3.2.1/commons-collections-3.2.1.jar
Download dom4j: flexible XML framework for Java from SourceForge.net
http://www.java2s.com/Code/JarDownload/hibernate3.jar.zip
http://www.java2s.com/Code/JarDownload/hibernate-core.jar.zip


----------



## NatGro (16. Nov 2009)

Was mich ein wenig wundert:

Müsste es nicht viele der benötigten Pakete bei http://www.hibernate.org in der Download-Sektion geben?


----------



## maki (16. Nov 2009)

NatGro hat gesagt.:


> Was mich ein wenig wundert:
> 
> Müsste es nicht viele der benötigten Pakete bei http://www.hibernate.org in der Download-Sektion geben?


Nein, geht aus Lizenzrechtlichen Gründen nicht.
Was mich wundert ist dass ich nirgendwo die Dependencies finden kann, ausser in den Maven poms 
Für Hibernate ist Maven2 eine riesen Erleichterung.

EclipseLink ist imho viel einfacher von Änfängern zu verwenden als Hibernate.


----------



## NatGro (16. Nov 2009)

maki hat gesagt.:


> Was mich wundert ist dass ich nirgendwo die Dependencies finden kann, ausser in den Maven poms



Ich weiß leider nicht, was Du damit meinst.


----------



## maki (16. Nov 2009)

Dependencies = Abhängigkeiten, die JArs inkl. Version von dem Hibernate abhängi ist.

Normalerweise findest man bei Projekten eine Liste mit den Depdencies, konnte keine für Hibernate finden, nur in den Maven poms.


----------



## NatGro (16. Nov 2009)

Ich frage mich auch, wenn ich jetzt einfach nach den diversen JARs google und diese herunterlade,
könnten die dann nicht auch eventuell auch in der falschen Version vorliegen?

Oder ist es sogar das, was Du meinst?


----------



## maki (16. Nov 2009)

Natürlich brauchst du die Jars in der richtigen Version... [c]mvnrepository.com[/c] kann helfen.


----------



## NatGro (16. Nov 2009)

@maki:
Wo "Du gerade hier bist":

Ist das ok, wenn ich die Links zu den einzelnen JAR-Files hier poste oder verstösst das gegen die Boardregeln?


----------



## maki (16. Nov 2009)

Klar kannst du links hier posten


----------



## NatGro (16. Nov 2009)

So, ich hab Sie jetzt alle gefunden, denke ich.
Hier die Liste:

http://mirrors.ibiblio.org/pub/mirrors/maven/antlr/jars/antlr-2.7.6.jar
http://mirrors.ibiblio.org/pub/mirr...llections/3.2.1/commons-collections-3.2.1.jar
Download dom4j: flexible XML framework for Java from SourceForge.net
http://www.java2s.com/Code/JarDownload/hibernate3.jar.zip
http://www.java2s.com/Code/JarDownload/hibernate-core.jar.zip
http://www.java2s.com/Code/JarDownload/javassist.jar.zip
Java Transaction API (JTA)
http://mirrors.ibiblio.org/pub/mirrors/maven/log4j/jars/log4j-1.2.15.jar
http://mapmap.googlecode.com/files/mysql-connector-java-5.0.8-bin.jar
slf4j-api-1.5.6.jar - Archive Details - Jarvana
http://surfmoss.iqfr.csic.es/surfla...guera/image-j-plugins/slf4j-log4j12-1.5.6.jar


Im Tutorial steht nun:
*"Anschließend erstellt ihr eine Datei mit dem Namen log4j.properties und folgendem Inhalt:"*

Wo soll diese Datei ablegen bzw. speichern?


----------



## maki (16. Nov 2009)

Die links ohne Versionsnummer würde ich sofort rausschmeissen, viel zu mehrdeutig.
Du kannst alle Hibernate Dependencies aus Maven Repos ziehen (wie zB. [c]http://mirrors.ibiblio.org/[/c]), ist sicherer, langfristig zuverlässiger und auf jedenfall ist dann die Version eindeutig.


----------



## ARadauer (16. Nov 2009)

@neurox: Da hast du dir was angefangen... ;-)

Ich bin der Meinung in so einen Thread sollten nur Fragen die das Thema des Tutorials betreffen. Wie man jars findet und wie man sie in Eclipse einbindet, das kann man auch im Anfängerforum posten. ;-)


----------



## NatGro (16. Nov 2009)

NatGro hat gesagt.:


> Im Tutorial steht nun:
> *"Anschließend erstellt ihr eine Datei mit dem Namen log4j.properties und folgendem Inhalt:"*
> 
> Wo soll diese Datei ablegen bzw. speichern?



Wenn mir hier jemand weiterhelfen könnte wäre super!


----------



## mvitz (16. Nov 2009)

Wenn das ganze ein eclipse projekt ist einfach in einen beliebigen Src Ordner deiner Wahl (idr. src)


----------



## NatGro (18. Nov 2009)

So sieht das jetzt bei mir aus.
Ist das soweit in Ordnung?


```
public enum Land { DEUTSCHLAND {
-AT-Override
public String toString() {
return "Deutschland";
} 
}, ÖSTERREICH{
-AT-Override
public String toString() {
return "Österreich";
}
```
in Deinem Tutorial habe ich durch

```
public enum Land { DEUTSCHLAND {
@Override
public String toString() {
return "Deutschland";
} 
}, ÖSTERREICH{
@Override
public String toString() {
return "Österreich";
}
```
ersetzt. Nun habe ich keine Fehlermeldungen mehr. Oder musste dort extra -AT- stehen?


----------



## neurox (30. Nov 2009)

NatGro hat gesagt.:


> So sieht das jetzt bei mir aus.
> Ist das soweit in Ordnung?
> ersetzt. Nun habe ich keine Fehlermeldungen mehr. Oder musste dort extra -AT- stehen?



Hallo NatGro, der Fehler ist mir gar nicht aufgefallen. Ja, mit dem @ ist das natürlich richtig. Mir hat da wohl die Blogsoftware einen Streich gespielt und das @ für den Teil einer Email-Adresse gehalten und maskiert.

Werde das sofort korrigieren.

Grüße
neurox


----------



## neurox (30. Nov 2009)

NatGro hat gesagt.:


> So, ich hab Sie jetzt alle gefunden, denke ich.
> Hier die Liste:



Super! Ich werde die Dateien in dem Tutorial mal gleich verlinken!


----------



## neurox (30. Nov 2009)

maki hat gesagt.:


> Die links ohne Versionsnummer würde ich sofort rausschmeissen, viel zu mehrdeutig.
> Du kannst alle Hibernate Dependencies aus Maven Repos ziehen (wie zB. [c]http://mirrors.ibiblio.org/[/c]), ist sicherer, langfristig zuverlässiger und auf jedenfall ist dann die Version eindeutig.



Ich glaube dazu sollte man auch mal ein eigenes Tutorial schreiben. Viele Anfänger wissen ja gar nicht, was Maven macht. Ich werde mir das jedenfalls mal auf meine ToDo-Liste setzen und eins schreiben, sobald ich wieder Zeit habe.


----------



## NatGro (2. Dez 2009)

Das wäre super, ich habe bisher auch leider noch nicht die Zeit gefunden mich eingehend mit Hibernate auseinander zu setzen, daher wäre ein detaillierteres Tutorial natürlich Gold wert.


----------



## maki (2. Dez 2009)

neurox sprach von einem Tutorial für Maven2, imho gibt es da mehr als genug, dasselbe gilt imho auch für Hibernate 
Aber jedem das seine...


----------



## neurox (2. Dez 2009)

maki hat gesagt.:


> neurox sprach von einem Tutorial für Maven2, imho gibt es da mehr als genug, dasselbe gilt imho auch für Hibernate
> Aber jedem das seine...



Ja, ich hatte mich auf Maven2 bezogen. Was es da an Tutorials gibt, hab ich mir noch nicht angeschaut. Im Bereich Hibernate gibt es einiges. Aber alle sind Lückenhaft, was es für Anfänger recht schwer macht. Besonders die hier besprochenden Dependencies sind ein Problem, das in den Tutorials meinst doch recht stiefmütterlich behandelt wird.

Daher denke ich schon, das mein Tutorial zu Hibernate eine gewisse Daseinsberechtigung hat.

Aber keine Sorge, ich bin auch nicht beleidigt wenn da jemand anderer Meinung ist ;-)


----------



## EarthDragon (2. Mai 2010)

hmm ich hab bei dem tutorial nen problem ich weis aber nich wo es liegt
ich hab eine klasse "Test" und die hat nur 2 felder ne id und nen test string 
wenn ich den von dem "ersten versuch" probiere das in die datenbank einzutragen macht er auch alles soweit wies soll in der datenbank wird auch der identifier hochgezählt(der nächste identifier is wieder eins höher) aber der datensatz erscheint nicht in der datenbank


hier die test.hbm.xml datei:

[xml]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="test.Test">
<id name="id">
<generator class="native" />
</id>
<property name="test" />
</class>
</hibernate-mapping>[/xml]

hier auschnitt von dem (denk ich) relevanten teil der consolen ausgabe


```
table found: hibernateTestDb.Test
columns: [id, test]
foreign keys: []
indexes: [primary]
Setting dialect [org.hibernate.dialect.MySQLInnoDBDialect]
Setting dialect [org.hibernate.dialect.MySQLInnoDBDialect]
schema update complete
Checking 0 named HQL queries
Checking 0 named SQL queries
opened session at timestamp: 12728213864
Erstelle neuen Eintrag ...
executing identity-insert immediately
about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
opening JDBC connection
insert into Test (test) values (?)
Hibernate: insert into Test (test) values (?)
Natively generated identity: 7
about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
processing flush-time cascades
dirty checking collections
Flushed: 0 insertions, 0 updates, 0 deletions to 1 objects
Flushed: 0 (re)creations, 0 updates, 0 removals to 0 collections
listing entities:
test.Test{id=7, test=hi}
releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
aggressively releasing JDBC connection
```

und die ErsterVersuch.java
[Java]import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import test.Test;

public class ErsterVersuch {

public static void main(String[] args) {
Session session = null;
try {
// Datenbankverbindung konfigurieren (hibernate.cfg.xml wird eingelesen)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();

System.out.println("Erstelle neuen Eintrag ...");

// Objekt instanzieren und mit Werten befüllen
Test t1 = new Test();
t1.setTest("hi");
// das Objekt in der Datenbank ablegen
session.save(t1);
} catch (Exception e) {
e.printStackTrace();
} finally {
session.flush();

session.close();
}
}
}[/Java]


----------



## neurox (3. Mai 2010)

Also wenn man nach das Ausgabe Deiner Console geht, wurde die Id auf 7 hochgezählt.

Wie schaust Du denn in die Datenbank? phpmyadmin? Vielleicht liegt da irgendwo der Fehler. Vieleicht siehst Du die Änderungen einfach nur nicht.

Prüf' das bitte noch mal.

Grüße
neurox


----------



## EarthDragon (3. Mai 2010)

bis auf "Nächste Autoindex  	8" weist nichts darauf hin das da überhaupt was passiert ist 
ich hab auch schon mit dem auslesen per java getestet da hatte ich auch keine datensätze
ich hab ja auch die vermutung das es an der db liegt aber ich wüste nich wo 
der db user hat alle rechte auf der datenbank und darf von überall zugreifen
...
wenns dir bei der lösung des problems helfen würde würd ich dir mal die daten geben denn köntest du mal reinschauen oder mal von dir aus ne testaplikation testen


----------



## Yzebär (3. Mai 2010)

Sieht so als würde ein Commit auf die Transaktion fehlen. Probier doch mal dasselbe mit eigenem Commit:

```
Session sess = factory.openSession();
 Transaction tx;
 try {
     tx = sess.beginTransaction();
     //do some work
     ...
     tx.commit();
 }
 catch (Exception e) {
     if (tx!=null) tx.rollback();
     throw e;
 }
 finally {
     sess.close();
 }
```


----------



## neurox (4. Mai 2010)

EarthDragon hat gesagt.:


> wenns dir bei der lösung des problems helfen würde würd ich dir mal die daten geben denn köntest du mal reinschauen oder mal von dir aus ne testaplikation testen



Ja, schick einfach mal das Projekt, dann werde ich sicherlich sehen, woran es liegt.

An einem fehlenden Commit, wie Yzebär vermuttet kann es nicht liegen, da wir hier gar keine Transaktion verwenden.


----------



## timbeau (21. Sep 2010)

Es ist zwar schon älter aber gerade interessant für mich. Die fehlenden Einträge liegen einfach an den fehlenden einträgen in der Mapping-XML Datei. Dort muss statt z.B.

[XML]<property name="anrede" />[/XML]

folgendes stehen: 

[XML]<property name="vorname" type="java.lang.String">
            <column name="VORNAME" />
</property>[/XML]

was dazu führt, das hier überhaupt gemapped wird.

Passend hierzu gibts auch ein Hibernate-Plugin von JBoss glaube ich. Aber es gibt ja noch die Möglichkeit von Annotations.


----------



## neurox (21. Sep 2010)

timbeau hat gesagt.:


> Passend hierzu gibts auch ein Hibernate-Plugin von JBoss glaube ich. Aber es gibt ja noch die Möglichkeit von Annotations.



Ich muss gestehen, dass ich selber eigentlich nur noch mit Annotationen arbeite. Das geht wesentlich schneller uns ist meines Erachtens leichter zu warten, weil man das Mapping und die Bean in einer Datei hat. Das Tutorial habe ich mit XML geschrieben, weil es für das Verständnis leichter ist.

Das Hibernate-Plugin hat mir irgendwie nie viel gebracht.


----------

