# Lohnt sich Hibernate?



## TheChemist (17. Aug 2009)

Hallo, ich arbeite immoment an einem Projekt, bei dem ich jetzt an dem Punkt angekommen bin, Objekte speichern zu wollen. Es ist ein vergleichsweise eher kleines Projekt, allerdings mit Datenbankanbindung. Jetzt die Frage, lohnt es sich mich dafür in Hibernate einzuarbeiten oder gibt es Wege, das ganze einfacher zu realisieren? Wenn ich mich so nämlich ein bisschen durch die Themen klicke, kommt es mir fast so vor, als würde ich mit Kanonen auf Spatzen schiessen wollen...

Egal wie die Antwort ausfällt, wäre es schön wenn ihr noch ein Link für den Einstieg posten könntet, sofern euch ein guter bekannt ist.


----------



## Noctarius (17. Aug 2009)

Also ich habe mich gerade am Wochenende erstmals intensiv mit Hibernate "rumgeschlagen" (und das meine ich auch so). Bisher habe ich immer EclipseLink oder Torque verwendet, musste aber auf Grund eines Wunsches Hibernate einsetzen.

Prinzipiell ist mir dabei ein grundlegendes Problem mit Hibernate aufgefallen: Sessions.

Wie hier öfter schon auf fragen nach "Wieso ist mein Objekt Hibernate nicht mehr bekannte?" oder "Wieso findet Hibernate die Session nicht mehr?" geantwortet wurde: Welcome to the world of Hibernate.

Prinzipiell ist aber nur das erste Programm mit Hibernate vermutlich echt unhandlich, kennt man die Fallstricke (welche oftmals auch recht unschöne Workarounds haben) umgeht man diese im nächsten Versuch direkt.

Grundlegend hat Hibernate bis auf seine Eigenheiten und kleineren Macken (die hatte EclipseLink am Anfang aber bestimmt auch und ich kann mich nur nicht mehr daran erinnern, weil ich gleichzeitig mit OSGi angefangen habe ) nichts schlechtes sagen.

Es werden extrem viele Datenbank-SQL-Dialekte unterstützt (allein für MySQL sind glaub ich 5 verschiedene dabei) und Geschwindigkeitsmäßig ist es auch recht angenehm.


----------



## maki (17. Aug 2009)

Alle ORM haben ihre Lernkurve, aber wenn du komplexe Objekte speichern willst, ist das meist einfacher mittelfristig betrachtet als so etwas selbst zu implementieren.


----------



## Noctarius (17. Aug 2009)

Ich find trotzdem EclipseLink ist die feinere Alternative (zumindestens aus meiner Sicht weniger Fallstricke ^^)


----------



## fkh (18. Aug 2009)

Noctarius hat gesagt.:


> Ich find trotzdem EclipseLink ist die feinere Alternative (zumindestens aus meiner Sicht weniger Fallstricke ^^)



Grüß dich,

kannst du dazu mal aus dem Nähkästchen plaudern, was deiner Ansicht nach in EclipseLink besser gelöst wurde? 

Danke und Gruß
fkh


----------



## Noctarius (18. Aug 2009)

Im grundlegenden 3 Punkte:
- Bytecode Enhancement statt Proxy-Classes (welche dich teils zu abstrusen Workarounds zwingen), 
- Das Sessionhandling (welches dich teils zu abstrusen Workarounds zwingt)
- Die teils unfertige JPA Implementierung (welche dich teils zu abstrusen Workarounds zingt) 

;-) Noch Fragen? *gg*

Sagen wir so, ich mag halt JPA und nicht zuletzt ist EclipseLink dann für JPA 2.0 die Referenzimplementierung und Hibernate ist derzeit obwohl es angebitlich JPA kompatibel ist etwas seltsam.

Z.B. speichert es ein neues Objekt zwar in der Datenbank aber setzt den automatisch generierten Key nicht im Entity. ssve bzw saveOrUpdate (aus der Session) tun es aber. Nach jedem neuen Pagerequest musst du das Objekt mit merge erst wieder in der Session (und bei JPA damit auch im EntityManager) erst wieder bekannt machen. Ohne ein EntityManager oder Session.flush läuft oft garnichts, usw usw usw ^^

Vielleicht bin ich auch nur zu dumm gewesen Hibernate zu nutzen aber mit etwas Suche wusste Google immer etwas mehr über massig Leute mit exakt den selben Fehlern, waren eben etwas mehr Leute dumm genug *gg*


----------



## byte (18. Aug 2009)

Hibernate ist recht komplex. Ich glaube nicht, dass Du da nach einem Wochenende schon alles durchschaut hast, um ein abschließendes Urteil zu bilden.

Session Management ist ein elementarer Bestandteil von Hibernate. Da sollte man schon ein bißchen Zeit investieren, um zu verstehen wozu Sessions gut sind und wie man sie je nach Anwendungsfall am besten handhabt.

Sessions haben imo große Vorteile, z.B. First-Level-Cache, Flushing, Connection Handling, ... Ist die Hibernate Session nicht im Grunde das Pendant zum EntityManager in JPA? IMO wurde das Konzept doch 1zu1 geklaut. 

In den meisten Fällen ist das Session Management recht simpel. Man benutzt den Current Session Context von Hibernate. In der Regel ist dieser Context die Transaktion. Das heisst, Du holst Dir die Session über SessionFactory#getCurrentSession(). Die Session wird automatisch geflusht und geschlossen, wenn das Commit der Transaktion kommt.

Zu EclipseLink kann ich wenig sagen, da ich es noch nicht benutzt habe. Bin halt ein Verfechter von Hibernate.


----------



## The_S (18. Aug 2009)

Noctarius hat gesagt.:


> - Bytecode Enhancement statt Proxy-Classes (welche dich teils zu abstrusen Workarounds zwingen),
> - Die teils unfertige JPA Implementierung (welche dich teils zu abstrusen Workarounds zingt)



Du sprichst mir aus der Seele  . Session-Handling ist aber eigentlich gar nicht mal so schlecht, wenn man sich ein wenig damit befasst hat.


----------



## Atze (18. Aug 2009)

gerade bei einem kleinen projekt würde ich (falls du genügend zeit dafür hast) hibernate ausprobieren, da du dich da mehr mit der orm.geschichte als mit den feinheiten der eigentlichen software beschäftigen kannst. eine kleines projekt ist für den einstieg imho richtig, da man sich aufs wesentliche konzentrieren kann. auch wenn man nicht alle fähigkeiten ausreizen wird, die grundlagen (mapping, annotations, konfiguration) hat man dann in minimalform schonmal hinter sich, und kann beim nächsten mal in die vollen gehen!  man fängt ja in java auch mit hello world an, und nicht mit ner j2ee anwendung.

ich fand den einstieg in hibernate (mit entsprechender lektüre, galileo) garnicht so schwer, weils gut erklärt und fallstricke aufgezeigt werden.

ich würde mit dem kleinen projekt, auch wenns kanonen auf spatzen sind, schon mit hibernate anfangen. vielleicht wird das projekt ja noch größer, und du hast die bessere erweiterbarkeit. wenn nicht, hast du zumindest was gelernt


----------



## Noctarius (18. Aug 2009)

Also dieses Wochenendprojekt hatte 3 Entities und damit 3 Daos und das reichte für den ersten Kampf vollkommen aus  Mit Größerem anfangen würde ich definitiv nicht anraten, dafür sind zuviele Eigenheiten mit zu beachten.

Um einen guten Einstieg in ORM zu bekommen, kann man auch das etwas betagtere, aber nicht minder leistungsfähige, Torque ansehen, welches wir teils in großen Projekten auch noch erfolgreich im Einsatz haben.

Wie bereits erwähnt, mag sein, dass EclipseLink ähnliche Fallstricke hatte welche durch die OSGi S..... nur verdeckt wurde ;-)


----------



## byte (18. Aug 2009)

Habs mal recherchiert. EntityManagerFactory ist das gleiche wie Hibernates SessionFactory und EntityManager ist das gleiche wie Hibernates Session. JPA hat da also mehr oder weniger die Konzepte von Hibernate übernommen. 

Zum Thema: Es ist auch grade ne neue iBatis Version rausgekommen: iBATIS Home


----------



## maki (18. Aug 2009)

iBatis ist zwar kein ORM, sondern nur ein SQL Mapper (SQL Statements in XML Dateien, mit der Möglichkeit Objekte zurückzuliefern etc. ) und ein Dao Framework, aber eine imho interessante Alternative wenn man ein Legacy DB Schema hat dass sich nicht gut auf Hibernate Mappen lässt aber man keine Lust hat sich mit JDBC rumzuschlagen 
Mit iBatis baut man sich sozusagen sein ORM selber.

Dachte das EntityManager Prinzip hat man von JDO geklaut, dort hiess das Ding PersistenceManager .. naja, egal.


----------



## homer65 (18. Aug 2009)

Es geht übrigens auch komplett ohne Hibernate oder etwas ähnliches. Gerade bei einem kleinen Projekt kann sich fragen ob es sich lohnt Wochen bis Monate in die Einarbeitung in Hibernate zu investieren.


----------



## Atze (18. Aug 2009)

wochen bis monate??? also für n kleines projekt, reichen für die grundlagen 1-2 tage


----------



## maki (18. Aug 2009)

homer65 hat gesagt.:


> Es geht übrigens auch komplett ohne Hibernate oder etwas ähnliches. Gerade bei einem kleinen Projekt kann sich fragen ob es sich lohnt Wochen bis Monate in die Einarbeitung in Hibernate zu investieren.


Wer ein ORM beherrscht, wird es immer einsetzen


----------



## Atze (18. Aug 2009)

genau, also hat das "kanonen auf spatzen schießen" dann auch einen sinn gehabt, weil man die grundlagen dann einmal drin hat


----------



## JanHH (23. Aug 2009)

Also ich finde JPA mit Hibernate klar, logisch, einfach und keineswegs "mit Kanonen auf Spatzen...". Das einzig komplizierte ist, es überhaupt zum laufen zu kriegen, aber wenn man das hat, flutscht es doch prima. Auch das Session-Konzept, bzw die Frage "wann ist ein Objekt persistent, wann nicht" ist klar und logisch und man muss das Prinzip lediglich einmal verstehen.

Gerade bei einem relativ simplen "ich muss in meiner Anwendung Objekte speichern" gibts doch gar keinen einfacherern Weg.. man muss eigentlich NUR einmal @Entity über die Klasse schreiben, dann noch die @Id-Property, und das wars dann doch auch schon.. im simpelsten Fall.

Also ich denke, ja, es lohnt sich auf jeden Fall. Ich denke auch, der Threadstarter ist mehr an einer allgemeinen Einschätzung von OR-Mappern interessiert, als an einem Vergleich "Hibernate vs. EclipseLink", welcher hier ja auch stattgefunden hat. Gerade wenn man erstmal anfängt sich damit zu beschäftigen dürfte man doch kaum Unterschiede bemerken.. und es ist vermutlich eh sinnvoll, sich an JPA zu halten und nicht Hibernate "direkt" zu benutzen, und welche JPA-Implementierung dann "unter der Haube" werkelt, ist dann doch, zumindest am Anfang, zweitrangig..

Falls es jemanden interessiert, ich habe von meiner Hibernate-/JPA-Konfiguration einen Screenshot von der Netbeans-Projektansicht, wo alle benötigten jar-Files zu sehen sind.


----------



## TheChemist (23. Aug 2009)

So frisch zurück aus dem Urlaub und nach dem lesen dieses Threads hab ich mich dafür entschieden mir Hibernate-Kenntnisse anzueignen. Scheint wohl einfach das beste zu sein. Hat einer von euch dazu vielleicht einen guten Link zu einem Tutorial o.ä.?

@ JanHH
Den Screenshot würde ich gern mal sehen, ich habe gemerkt, dass man quasi erschlagen wird mir .jar´s wenn man sich Hibernate runterlädt.


----------



## JanHH (24. Aug 2009)

Sag mir wohin ich ihn schicken soll.


----------



## TheChemist (24. Aug 2009)

JanHH hat gesagt.:


> Sag mir wohin ich ihn schicken soll.



Naja, am besten als PN, wenn das nicht geht, als Email, die Adresse schick ich dir dann.


----------

