Lohnt sich Hibernate?

Status
Nicht offen für weitere Antworten.

TheChemist

Bekanntes Mitglied
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

Top Contributor
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.
 
M

maki

Gast
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

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

Noctarius

Top Contributor
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

Top Contributor
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. ;)
 
Zuletzt bearbeitet:

The_S

Top Contributor
- 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

Top Contributor
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

Top Contributor
Also dieses Wochenendprojekt hatte 3 Entities und damit 3 Daos und das reichte für den ersten Kampf vollkommen aus :D 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

Top Contributor
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
 
M

maki

Gast
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

Top Contributor
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

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

JanHH

Top Contributor
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

Bekanntes Mitglied
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
X [Hibernate] Lässt sich die Dauer eines SELECTs loggen? Data Tier 4
T Hibernate/Spring JPA: eigene ID generieren Data Tier 5
Avalon @ManyToOne Hibernate oder JPA? Data Tier 5
D Hibernate Hibernate mit MariaDB Data Tier 1
ToBJo Hibernate Glassfish deploy mit Hibernate schlägt fehl Data Tier 1
C JPA Hibernate Map<String,String> richtig mappen Data Tier 2
S JPA Hibernate Search & EclipseLink (oder OpenJPA) Data Tier 0
R JPA Probleme mit Wechsel von EclipseLink auf Hibernate Data Tier 4
ARadauer Hibernate Entität readonly laden... Data Tier 1
G Hibernate SQL in Hibernate: Keine Parameter mit Index? Data Tier 2
P Wildfly + Hibernate + SQL Server Data Tier 0
E JPA Hibernate Query mit Timestamp hat seltsames Verhalten Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C Hibernate ProgressBar updaten mit Daten aus Hibernate Data Tier 4
B Hibernate und MySQL testen Data Tier 8
I Hibernate HQL: generiertes SQL ausgeben Data Tier 1
R mapping-file für hibernate zum Überschreiben der Annotationen Data Tier 7
R Hibernate Hibernate und Logback Data Tier 2
R Hibernate möchte Schema zwei mal undeployen Data Tier 2
F Hibernate Hibernate / JPA Data Tier 4
E Hibernate: Session vs EntityManager Data Tier 3
C Hibernate Hibernate Code Generation Data Tier 3
S Hibernate Mehrfachverbindung mit Hibernate Data Tier 3
M Hibernate Einstiegsfrage Data Tier 5
M Exception in thread "main" org.hibernate.MappingException: java.lang.ClassNotFoundException: Message Data Tier 4
S Hibernate Einstieg in Hibernate 3.2 sinnvoll? Data Tier 8
P JPA Eigene Vererbungsstrategie mit JPA / Hibernate Data Tier 2
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
Y Jboss seam-hibernate-jpa Data Tier 5
RaoulDuke Hibernate Map<String,String> mit Annotations mappen Data Tier 2
M Hibernate Hibernate with GWT Data Tier 4
C Hibernate JPA mysql db erstellen Data Tier 4
M Hibernate Hibernate liest Daten zu oft aus! Data Tier 16
pg1337 Hibernate Fragen Data Tier 11
D Probleme bei Left Joins mit Hibernate createCriterias() Data Tier 2
D Hibernate probleme mit Verlinkungstabelle Data Tier 4
2 Hibernate Annotations Data Tier 7
G Hibernate select update no wait Data Tier 8
Z Hibernate: Many-To-Many nur eine bestimmte Spalte Data Tier 3
K Hibernate - Envers - Erzeugung der SQL Skripte Data Tier 4
G Hibernate 1:n Beziehung mit Vererbung Data Tier 5
D Hibernate-Criteria-API (Projections und MAX-Funktion) Data Tier 6
L Hibernate: failed to lazily initialize a collection of role Data Tier 3
S Hibernate hibernate.cfg.xml Data Tier 14
D JPA vs Hibernate.cfg und Entitymanager Data Tier 6
H Hibernate - Mapping für Enumeration Data Tier 1
R Hibernate Criteria Abfrageproblem Data Tier 2
A Hibernate und jdbc zusammen Data Tier 4
D Mit Hibernate aus JUnit ein DB-Schema erzeugen Data Tier 6
S [Hibernate] No Persistence provider for EntityManager Data Tier 5
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
G Hibernate HQL und Interface Data Tier 4
G JSF Hibernate no session or session was closed Data Tier 12
T JPA2/Hibernate: Many-to-Many-Relation wird u.a. beim löschen nicht aktualisiert Data Tier 14
S (Hibernate) Mapping einer Datenbanktabelle mit mehreren Fremdschlüssel Data Tier 7
X [Hibernate] Zusammengesetzte Entities möglich? Data Tier 7
N Hibernate Fake? Data Tier 2
S Problem beim Insert mit Hibernate Data Tier 9
V Hibernate Projection Data Tier 2
T org.hibernate.impl.SessionFactoryImpl Memory Leak Data Tier 10
G Hibernate Composite key Data Tier 11
X [Hibernate] Connection Pool - MinSize ? Data Tier 2
R Hibernate Criteria OR Data Tier 2
T hibernate/jpa abgefragte Listen immer mit Null-Werten gefüllt Data Tier 8
X [Hibernate] Anderen Connection Pool - Vorschläge? Data Tier 3
ARadauer Hibernate DDL Loggen Data Tier 6
G Hibernate abfrage Collection Data Tier 3
X [Hibernate] ReverseEngineering - Eigene Strategy verwenden? Data Tier 3
R Hibernate Criteria .group größer als Data Tier 5
R Hibernate daten laden Data Tier 7
H [Hibernate]1:1 Beziehung Data Tier 8
H [Hibernate]No CurrentSessionContext configured! Data Tier 6
R Hibernate n:n Relationtabelle mit Date Data Tier 3
H [Hibernate] Unknown Entity Data Tier 3
H [Hibernate] Configuration Data Tier 3
C [Hibernate] Generierung von hbm.xml to Java Data Tier 4
lumo Eclipse & JPA & Hibernate & Derby Data Tier 5
J Zufallsauswahl aus ResultList bei JPA(Hibernate) / Performance Data Tier 3
M Hibernate: Datum 0001-01-01 erzeugt null-Datum Data Tier 4
G Datenbankzugriff mit Hibernate Data Tier 7
Y Hibernate - Angabe des Schemas Data Tier 6
LadyMilka (Hibernate) in Criteria implizierter Join durch Subquery's Data Tier 8
M Hibernate Mehr als 1 Object speichern? Data Tier 18
M Unerklärliche Hibernate Exception Data Tier 20
LadyMilka (Hibernate) subquery in FROM-Clause Data Tier 9
haemi Viele DTOs in hibernate IdentityMap Data Tier 3
LadyMilka (hibernate) UNION dem Dialekt hinzufügen Data Tier 3
M Hibernate + Oracle 10g XE Data Tier 3
lumo Hibernate - entity class not found Data Tier 5
P SQL PRoblem Hibernate? Data Tier 8
J Vererbung mit JPA / Hibernate - pro/contra Data Tier 3
T JBoss/Hibernate: Abfrage dauert lang + hohe CPU? Data Tier 19
7 Hibernate-Abfrage (SubSelect im FROM) Data Tier 2
G Hibernate: many-to-one - Verwaiste Datensätze löschen Data Tier 2
G Layer für Datenbankzugriff Hibernate Data Tier 5
G Hibernate Zwischentabelle Data Tier 2
Java.getSkill() Hibernate und Spalte vom Typ xml Data Tier 6
G Hibernate 0...1 : 1 Beziehung Data Tier 6
G Hibernate mehrere @oneToone Data Tier 2
G Hibernate 1:n, 1:1 Data Tier 26

Ähnliche Java Themen

Neue Themen


Oben