Hibernate Einstiegsfrage

mrbela

Bekanntes Mitglied
Hey Leute!

Ich bin gerade dabei mir Hibernate reinzuziehen und da stellt sich mir eine Frage.

Ich habe zwei verschiedene Versionen der Definition von Primärschlüssel (mit @Id und @GeneratedValue) gesehen:

1)
Java:
@Entity
public class Foo {
   @Id
   @GeneratedValue
   int id

   public int getId() {
      return this.id;
   }

   public void setId(int id) {
      this.id = id;
   }
}

und 2)
Java:
@Entity
public class Foo {
   int id

   @Id
   @GeneratedValue
   public int getId() {
      return this.id;
   }

   public void setId(int id) {
      this.id = id;
   }
}

Das erstere wird in meinem Buch "Feldzugriff" und das letztere "Property-Zugriff" genannt...

Leider erschließt sich mir aber nicht der Unterschied, daher die Frage.

Vielen Dank für Eure Hilfe!!
 
Beides ist möglich,

genauso wie du alles in der hibernate.cfg.xml machen kannst oder die mappings als xml in dieser einbindest und dafür keine annotations benutzt,
 
Beides ist möglich,

😉 das weiß ich ja schon... Nur die Frage war die:

Das erstere wird in meinem Buch "Feldzugriff" und das letztere "Property-Zugriff" genannt...

Leider erschließt sich mir aber nicht der Unterschied, daher die Frage.

Wo liegt der Unterschied?? Wenn ich mir z.B. aus den Annotationen die Tabellen automatisch generieren lasse, was wird dann jeweils anders gemacht? Bzw. wo entsteht ein Unterschied?

Soweit ich das im Buch verstanden habe, sind diese beiden Methoden nicht äquivalent, wobei ich hierzu im Netz auch schon anderes gelesen habe... :/

danke!
 
Es ändert sich gar nicht's an dem Ergebnis.

Der Unterschied ist nur das einmal auf das Attribut per getXY zugegriffen wird (PropertyAccess), beim anderen mal direkt auf das Attribut.

Einen Unterschied würde es nur machen wenn du z.B. im getter/setter Logik implementiert hättest, diese würde bei FieldAccess nicht ausgeführt werden
 
Wenn du in der Setter einen " "(Leerstring) abfängst, und ihn statdessen null setzt, also

Java:
if(testString.trim().isEmpty()){
testString=null;
}
this.propString=testString;

Dann würde via Property das halt anders lauen als bei Field ...
 
Filed Access ist die "bessere" Variante.

Mit JPA 1.0 hat man noch Property Access empfohlen, mit JPA 2.0 hatte man dass dann "korrigiert", empfohlen wird nun Field Access.

Wenn man Property Access nutzt, braucht man für alle Felder Getter und Setter, das ist schon sehr "invasive" und verschandelt Schnittstellen.
Ausserdem geht es beim Persistieren ja darum, den internen Zustand eines Objektes zu speichern und später wiederherstellen zu können.
 

Neue Themen


Zurück
Oben