tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
9
ZUGRIFFE
820
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    683
    Hallo,

    ich habe eine Frage zu Hibernate und den Annotations, mit denen ich das O-/R-Mapping konfigurieren kann. Vorweg: Ja, ich möchte mit Annotations arbeiten, nicht mit einem XML Mapping.

    Aus einen Lehrbuch habe ich vor einiger Zeit, als ich mich mit Hibernate vertraut machte, gelernt, man sollte die Annotations an die Getter-Methoden einer Bean schreiben, z.B.:

    Code java:
    1
    2
    3
    4
    5
    6
    
    @ManyToOne( optional = true )
    @JoinColumn( name = "doc_id" )
    public Document getDocument()
    {
        return document;
    }

    oder auch

    Code java:
    1
    2
    3
    4
    5
    6
    
    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY )
    public Integer getId()
    {
        return id;
    }

    Ich habe recht große Domain Modelle, alles Beans mit sehr vielen Properties. Meine Frage ist nun, kann ich diese Annotations auch an die Member schreiben, anstatt an deren Getter-Methode? Das wäre dem ersten Beispiel dann entsprechend so:

    Code java:
    1
    2
    3
    
    @ManyToOne( optional = true )
    @JoinColumn( name = "doc_id" )
    private Document document = null;

    Sollte das funktionieren, gibt es irgendwelche Nachteile? Wiederspricht es vielleicht einer "best practice" und falls ja, warum?

    Falls nicht, würde ich das nämlich gerne so machen, denn ich finde es viel übersichtlicher, die Mapping-Annotations im Klassen-Kopf zu sehen, als ständig nach unten durch die Getter-/Setter-Methoden zu scrollen.


    Vielen Dank für Eure Hilfe!
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.329
    Hallo,

    soweit ich weiß, funktioniert das bei Hibernate nur an den Methoden.

    Gibt es einen bestimmten Grund, dass du nicht die JPA nutzt? Da hast du auch Annotations und die kannst du an die Variablen schreiben.

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Ähm... wie wärs mit ausprobieren? . Das häte dich wahrscheinlich genausoviel Zeit gekostet, wie den Post zu schreiben . Zum anderen liefert ne Googleanfrage zu "Hibernate Mapping Annotations" in den ersten Hits gleich Tutorials die genau das tun, wonach du fragst.

    Ansonsten würde ich dir ähnlich wie Sascha empfehlen, soweit wie möglich JPA zu nutzen und Hibernate als Persistenzprovider.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.329
    Ok, scheint als hätte ich mich geirrt. Ich glaube aber mal so etwas gelesen zu haben.

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  5. #5
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    683
    Danke für Eure Antworten.

    Soweit wie möglich JPA benutzen?

    Soweit ich weiß, ist Hibernate eine Implementierung von JPA. Sobald ich das Mapping mit den Annotations mache, benutze ich die Annotaions vom JPA. Auch meine obigen Beispiele sind JPA (alles Annotations aus javax.persistence). Von daher verwirren mich Eure Einwände gerade ein wenig

    Es geht mir auch nicht so sehr darum, ob es funktioniert, sondern ob es da irgendwelche nachteile gibt. Man kann doch als erfahrener Entwickler oft eine Meinung zu irgendwelchen Vorgehensweisen abgeben. Und so dachte ich, gäbe es hier vielleicht jemand, der sagt "hey ich mache das schon seit längerem so" oder "lass die Finger davon, denn es gibt die Nachteile A und B...".

    In der Hibernate Annotaions Doku steht ja auch, dass man es so machen kann, aber dort steht nichts von Vor- oder Nachteilen (Thema "property" oder "field" mapping).
     

  6. #6
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.329
    Der Vorteil an der JPA ist, dass du nicht auf Hibernate angewiesen bist. Du kannst auch einen anderen Persistence-Provider nehmen.

    Ich weiß jetzt nicht, ob es mit den JPA-Annotations funktioniert. Ich kann mich hier an einen Post erinnern, da hat es nicht funktioniert. Ich hab es noch nie ausprobiert.

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  7. #7
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    683
    Hi

    Also eigentlich geht es hier immer noch nicht darum, ob es geht In der Hibernate Dokumentation steht ja, dass es funktioniert (zugegeben, es könnte trotzdem nicht funktionieren, dann würde die Doku falsch liegen).

    Es geht mir einzig und allein um die "best practice", aber dazu kann wohlmöglich hier niemand etwas sagen.
     

  8. #8
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.329
    Das ist liegt ganz an dir, ob du es lieber an den Methoden stehen hast oder an den Variablen.

    Ich persönlich hab es lieber an den Variablen stehen.

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  9. #9
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    HIbernateannotationen gehen über die JPA Annotationen hinaus. Desweiteren hat Hibernate einige funktionalität, die nicht im JPA Standard festgelegt ist (Criterias usw.)

    2/3 deines Posts klangen halt so, als wenn du wissen wollen würdest, ob es überhaupt geht .

    Die Annotationsposition entscheidet darüber ob Hibernate die Werte per Methodencall oder per Feldmodifikation setzt. Das kann schon entscheident sein, wenn man im Setter halt nicht nur reine Zuweisungslogik hat.

    Gruß
    Ollie
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  10. #10
    DarthShader DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    683
    Dann habe ich mich wohl ungeschickt ausgedrückt, sorry

    Also ja, wenn ich im Setter noch anderen Code stehen habe, dann sollte die Annotation wohl auch an die Bean properties. Ansonsten werde ich das jetzt mal an die "fields" hauen. Ich achte auch darauf, dass ich es nicht vermische (wovon auch in der Hibernate Doku abgeraten wird).
     

Ähnliche Themen

  1. Hibernate-Annotations-Problem
    Von 7bkahnt im Forum Java
    Antworten: 2
    Letzter Beitrag: 23.04.10, 13:43
  2. Wann holt Hibernate tatsächlich Daten aus der DB? Beim Zugriff via Getter-Methode?
    Von DarthShader im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 20.05.09, 11:32
  3. Hibernate Annotations
    Von drezze im Forum Java
    Antworten: 0
    Letzter Beitrag: 28.11.08, 08:36
  4. Hibernate: Mapping v. Beziehungen und was Hibernate daraus macht
    Von DerGrinsemann im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 14.08.08, 12:53
  5. Struts: getter/setter methoden in formAction über schleife erstellen?
    Von jargo im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 11.12.06, 11:28