Annotation an felder oder methoden setzten?

Status
Nicht offen für weitere Antworten.

nimo22

Aktives Mitglied
Hallo,

wie ist es besser:

so:

Code:
...
@Id
@Column(name = "ID_PERSON", nullable = false)
private Integer idPerson;
...

oder so:

Code:
...
@Id
@Column(name = "ID_PERSON", nullable = false)   
public Integer getIdPerson() {
        return idPerson;
    }
public void setIdUser(Integer idPerson) {
        this.idPerson = idPerson;
    }
...

Was macht das für einen Unterschied? Ist das eine besser (sicherer, schnelller, etc..) als das andere?

dank vorab.
 

byte

Top Contributor
In der JPA Spec steht, man soll den Property AccessType nehmen (also an Gettern), aber keine Ahnung warum. Hibernate unterstützt beides (Property oder Field Access). Wenn man nix spezielles angibt, dann guckt Hibernate, wo @Id definiert ist und nimmt dann das als AccessType. Man sollte es also keinesfalls mischen, kann mit @AccessType aber auch spezielle Angaben machen.
 

SnooP

Top Contributor
Ich würde grundsätzlich dem Vorschlag der JPA nehmen... sprich schreib es an die get-Methode.
 
M

maki

Gast
Weis jemand warim Hibernate/JPA die getter zu den eigntlichen Attributen bevorzugt?

Hätte es umgekehrt erwartet...
 

nimo22

Aktives Mitglied
wieso umgekehrt erwartet??

Was is nun besser??

wenn man die fields nimmt, braucht man doch dann keine getter-setter-methoden mehr..is au a bissl performanter, felder abzufragen bzw. zu ändern, statt jedesmal get oder set aufzurufen..oder irre ich mich da?
 

ms

Top Contributor
Eigene Immutable-Types zB, wo es keine Getter und Setter gibt, wird man wohl mit Field-Access persistieren.

@nimo22
Public Members sind böse!
Performancemässig ist es denke ich irrelevant, da in beiden Fällen per Reflection zugefriffen wird.

ms
 
M

maki

Gast
Beim persitieren geht es doch darum, den internen Zustand eines Objektes zu speichern...

Hab letztens gelesen, dass JDO Standardmässig über die Felder geht, Hibernate macht es umgekehrt.

Muss zugeben dass in meinen Hibernate Projekten immer über getter und setter gegangen bin, selbst wenn das bedeutete einen getter/setter nur dafür hinzuzufügen, nicht so schön was die Kapselung betrifft.
 

nimo22

Aktives Mitglied
wieso kapselung?

wenn ich über die felder geh, brauch ich doch dann keine getter-setter?!?

Weniger Code-Müll?
 
M

maki

Gast
wenn ich über die felder geh, brauch ich doch dann keine getter-setter?!?
Richtig.

Aber wie gesagt, bis jetzt habe ich es immer über Getter/Setter gemacht anstatt über die Felder, dazu braucht man eben Getter/Setter, wenn diese nur von hibernate genutzt werden sollen, habe ich damit die Kapselung durchbrochen..
 

byte

Top Contributor
maki hat gesagt.:
Aber wie gesagt, bis jetzt habe ich es immer über Getter/Setter gemacht anstatt über die Felder, dazu braucht man eben Getter/Setter, wenn diese nur von hibernate genutzt werden sollen, habe ich damit die Kapselung durchbrochen..
Du kannst wahlweise Getter/Setter aber auch private setzen. Dann ist die Kapselung wieder hergestellt.
Ich benutze atm Field Access, habe aber trotzdem Getter/Setter für alle Member, die wahlweise private sind (z.b. Setter für ID).

Warum ich Field Access benutze? Ich finde es einfach praktischer, weil ich die Mapping Annotations dann auf einen Blick sehe und nicht immer erst umständlich den Getter suchen muss, wenn ich das Mapping anpasse. Solange ich keine klaren Vorteile von Property Access sehe, mache ich das so weiter. ;)
 
G

Guest

Gast
Ganz klar bei den Attributen, nicht bei Methoden. Allein schon aus dem simplen Grund, dass Getter und Setter nicht
immer Sinn machen oder gar dazu verleiten, die Interna einer Klasse ausserhalb der Klasse zu manipulieren.
Typisches Beispiel wäre die Komposition. Warum Getter für Collections anbieten, die nur innerhalb der Hauptentität
verwaltet werden und z.B. in anderer Form nach Aussen wiedergegeben werden?
Ausserden ist es, wie byto bereits geschrieben hat, um einiges übersichtlicher, wenn alle Annotationen an einem
Haufen zu finden sind.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben