Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Hibernate Frage

Empfohlene Antworten

Veröffentlicht

Hi Leute,

ich frage mich ob ein Hibernate Pojo zwingend nur reine Datenhaltung sein darf, also nur Felder und Getter/Setter, oder darf es auch beliebige weitere Funktionen halten. Gemapped wird schliesslich ja nur in den Config XMLs.

Also darf es weitere Funktionen halten oder nicht? Und kann die Klasse auch Felder halten die nicht persistent sind?

Ich hoff da weiss einer bescheid. Denn in meinem Buch, und der Doku hab ich garnichts dazu gefunden.

Servus,

ja und ja. Du darfst natürlich weitere Methoden in Deinem POJO definieren. Und Du kannst auch transiente Felder definieren. Bei Hibernate3 gibst Du dazu einfach die Annotation @Transient an, bei Hibernate2 sollte es dafür in der hbm.xml eine entsprechende Möglichkeit geben.

Ich finde die Online-Doku auf hibernate.org - Hibernate ganz hilfreich.

Schöne Grüße,

Peter

Hi,

kann man, sollte man aber nicht.

Du vermischt dann nämlich Persistence- und Applikationslogik.

Gruß Jaraz

Hallo Jaraz,

da wage ich zu widersprechen. Man sollte es nicht tun, wenn man wirklich Anwendungslogik in diese Klassen packen will. Aber das Verhalten eines persistenten POJOs existiert schon. Und das kann z.B. eine Wertebereichsüberprüfung oder das simple überschreiben der toString()-Methode sein. Diese sollten und müssen natürlich im Hibernate POJO implementiert werden.

Business-Logik hat hier nichts verloren, das gehört in die Business-Schicht. :) Ich habe deshalb auch meinen Beitrag vor dem abschicken noch einmal überarbeitet, da ich statt "Methoden" Business-Logik geschrieben habe. Danke für den Hinweis.

Peter

Natürlich gibt es sinnvolle Methoden in Hibernate POJOs die nicht getter oder setter Methoden sind. Das Überschreiben von equals und hashCode ist in vielen Fällen sogar zwingend notwendig.

Wenn man aber anfängt mit @Transient getter Methoden auszuschließen, kommt man schnell in den Bereich der Vermischung.

Werteüberprüfungen gehören für mich z.B. nicht unbedingt in die Persistenz Klassen.

Gruß Jaraz

Servus nochmal,

das @Transient verwende ich persönlich eigentlich nur für die Eigenschaft serialVersionUID, die ich nicht in der Datenbank haben will, die bei Serializable Objekten (das sind meine Hibernate POJOs natürlich immer) aber guter Stil ist.

Du hast aber Recht, man sollte sich überlegen, ob man Werte wirklich als transient markieren will, oder ob evtl. das Objektmodell zu überdenken ist.

Schönes Wochenende,

Peter

  • 1 Monat später...
das @Transient verwende ich persönlich eigentlich nur für die Eigenschaft serialVersionUID, die ich nicht in der Datenbank haben will
serialVersionUID ist doch eh static und wird daher überhaupt nicht als Property herangezogen.

kennt Ihr gute deutsche Bücher zur Einarbeitung in Hibernate bzw. eine deutsche Version der Reference Documentation?
Das wohl beste und umfangreichste Buch: http://www.manning.com/bauer2/.

Was deutsche Dokus angeht: Da dürftest du immer Schwierigkeiten haben. Selbst wenn es irgendwo Übersetzungen gibt sind diese in der Regel nur für ältere Versionen wirklich zutreffend und komplett. Eigentlich wie überall in der IT: Englisch ist das Maß der Dinge!

Was deutsche Dokus angeht: Da dürftest du immer Schwierigkeiten haben. Selbst wenn es irgendwo Übersetzungen gibt sind diese in der Regel nur für ältere Versionen wirklich zutreffend und komplett. Eigentlich wie überall in der IT: Englisch ist das Maß der Dinge!

Ich weiß, dauert leider länger, wenn man 329 Seiten auf englisch liest...

Danke für den Link. Sowas hab ich gesucht.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.