# Diverse Fragen zu ORM (Hibernate, JPA, etc.)



## -MacNuke- (2. Jun 2008)

Hallo Forum.

Ich bin gerade dabei ein neues Software-Projekt zu planen. Dies soll dann auf Java/Swing aufbauen und Datenbankzugriffe tätigen.

Ich habe mir vor einiger Zeit das Buch zu Hibernate gekauft und das auch gelesen. Das Beispiel aus dem Buch läuft bei mir auch bestens. Jedoch stellen sich mir da noch ein paar Fragen. Ich liste die mal einfach so auf. Würde mich freuen, wenn die jemand beantworten kann 

*1. - Erledigt* Man kann ja direkt Hibernate nutzen, oder den Standard-Weg JPA. JPA hat einige Vorteile (automatisches Suchen von Tabellen-Klassen), aber auch Nachteile (direktes Hibernate soll schneller sein). Nun wollte ich fragen welches denn nun der "empfehlenswertere Weg" wäre? JPA oder direkt Hibernate?

*2. -Erledigt* Hibernate - mehrere Tabellen - ein JTable - Updates. Es geht darum, wenn ich jetzt z.B. eine Liste aller Artikel anzeigen möchte, dann will ich ja meist nicht nur alle Artikel anzeigen, sondern auch Informationen aus anderen Tabellen, wie z. B. der Lagerbestand. In einer anderen Ansicht will ich jetzt aber eher die Kalkulationsdaten zu dem Artikel sehen, in einer Artikel-Liste. Dies mal als Beispiel. Kann man mit Adressen, etc. fortsetzen.

Wie geht man bei so etwas generell vor? Jede mögliche One-To-One Kombination in die Artikel.java zu schreiben, wäre etwas zu "naja"... aufwändig und schlecht, denke ich mal. Weil dann hab ich nachher rund 100 One-To-One Beziehungen da stehen.

Jetzt kann man ja eine HQL-Query machen, aber im Buch habe ich bisher kein Beispiel gefunden (überlesen?), welches 2 oder mehr Tabellen damit abfragt. Nur Mapping-Beispiele. 
Wie sieht so etwas aus? Klappt da das überhaupt noch mit automatischer "UPDATE"-Generierung über Getter/Setter, wenn jetzt jemand in der JTabele einen Wert ändert? Oder geht man da ganz anders heran?

*3. - Erledigt* Drucken... hat jetzt zwar nichts direkt mit ORM zu tun, aber das ist auch ein wichtiger Punkt. Ich will natürlich nicht für jeden Ausdruck, den ein Kunde vllt. mal irgendwann haben will, Code schreiben. Ich habe mir mal kurz JasperReports angeguckt und das sieht auch ganz gut aus. Aber kann man das auch mit Hibernate bzw. JPA koppeln? Es geht mir darum, dass ich nur SQL-Befehle gefunden habe, zur Eingabe, was natürlich wieder den Vorteil der relativen Datenbankunabhängigkeit von Hibernate etwas anschlagen würde.

Gibt's da schon irgendwas, oder müsste ich mir da selbst was überlegen und die Abfrage selbst einbauen und JasperReports (oder einem anderen Report-Tool) die Ergebnis-Daten rüber schieben?




Das sind erst mal meine 3 dringendsten Fragen 

Vielen Danke für eure Antworten im Voraus


----------



## byte (3. Jun 2008)

zu 1.) JPA ist die Spezifikation, Hibernate eine Implementierung dieser. Wenn Du nur auf der Spezifikation arbeitest, kannst Du die Implementierung theoretisch später austauschen, in der Praxis ist das aber wohl eher selten der Fall. Deine Frage ist etwas unglücklich formuliert. Es gibt keine Vorteile zw. JPA (Spezifikation) und Hibernate (Implementierung). Mein Rat: Halte Dich so lange es geht an die JPA, scheue im Zweifel aber nicht, Hibernate-Erweiterungen zu verwenden, wenn Du damit Dein Ziel besser erreichst.
Hibernate ist sowieso die Referenzimplementierung von JPA, weil JPA erst aus Hibernate entstanden ist.  Du wirst mit ziemlicher Sicherheit die ORM-Implementierung nie wechseln.


----------



## -MacNuke- (3. Jun 2008)

Ah OK, Danke. Das ergibt Sinn. Hab die erste Frage mal als Erledigt marktiert


----------



## foobar (3. Jun 2008)

Zu 3.) Du kannst Hibernate in JasperReports verwenden. Man kann die Hibernatesession einem Report übergeben und dann ganz normal damit Queries absetzen. Alternativ kannst du aber auch einfache Pojos von der Businesslogic-Tier generieren lassen und diese einfach mit JasperReports darstellen.


----------



## -MacNuke- (3. Jun 2008)

Ah Danke. Dann muss ich den Punkt mit der Übergabe der Hibernate-Session noch mal angucken, bzw. suchen. 

Jetzt noch die 2. Frage....


----------



## foobar (3. Jun 2008)

Zu 2.) Hm, ich verstehe die Frage nicht ganz. Die Vorgehensweise ist normalerweise folgende. Du erstellst ein Domainmodel das deine Geschäftslogik bzw. die Relationen der Entitäten wie Artikel, Kunden, Bestellungen etc. abbildet. In den Pojos definierst du dann in welcher Relation die ganzen Klassen zueinander stehen.
Das hat aber erstmal nichts mit irgendwelchen HQL-Queries zu tun. Wenn du eine HQL-Query absetzt kümmert sich Hibernate um das Mapping des ResultSets zu deinen Klassen(Domainmodel). 



> Weil dann hab ich nachher rund 100 One-To-One Beziehungen da stehen.


100 One-To-One in einer Pojo? Das würde mich auch stutzig machen.

Vielleicht suchst du ja auch sowas wie die Report Queries. 
http://rongou.blogspot.com/2005/08/hibernate-report-query.html

Zu Hibernate + Jasperreports habe ich noch das hier gefunden:
http://www.javalobby.org/articles/hibernatequery103/


----------



## -MacNuke- (3. Jun 2008)

foobar hat gesagt.:
			
		

> Vielleicht suchst du ja auch sowas wie die Report Queries.
> http://rongou.blogspot.com/2005/08/hibernate-report-query.html
> 
> Zu Hibernate + Jasperreports habe ich noch das hier gefunden:
> http://www.javalobby.org/articles/hibernatequery103/



Das sieht doch schon mal sehr gut aus, danke 

Muss ich dann mal testen


----------

