Databases Reference
In-Depth Information
1499 [main] INFO CRUDReihen - Vor save: 0 Asterix
Der Ausgabe unseres Programms entnehmen wir auch, dass Hibernate offensicht-
lich Prepared Statements verwendet. Im ersten Durchlauf wird also
insert into Reihen (id, name) values (null, 'Asterix')
zum RDBMS geschickt.
7
Ab jetzt untersteht das Objekt
reihe
der Kontrolle von
Hibernate. Das RDBMS vergibt den Wert
1
für den Primärschlüssel, den Hiberna-
te anfordert und der Methode
setId
des Objektes
reihe
übergibt. Daher erhal-
ten wir die Ausgabe
1536 [main] INFO CRUDReihen - Nach save: 1 Asterix
Wenn wir das Objekt
reihen
jetzt ändern und wieder der Methode
save
über-
geben, erzeugt Hibernate keine
insert
-, sondern eine
update
-Anweisung. Wir
probieren das mal aus, indem wir in die Schleife die beiden folgenden Zeilen ein-
fügen:
reihe.setName(name+"-V2");
session.save(reihe);
log.info("Nach 2. save: "+reihe);
In der Ausgabe finden wir jetzt noch zusätzlich
1616 [main] INFO CRUDReihen - Nach 2. save: 1 Asterix-V2
und
Hibernate: update Reihen set name=? where id=?
Die
Methode
save
erkennt
also,
ob
sie
eine
insert
-
oder
eine
update
-
Anweisung erzeugen muss.
19.6
Daten lesen
Wenn wir aus persistierten Daten wieder Objekte machen wollen, funktioniert das
am einfachsten über den Primärschlüssel mit Hilfe der Methode
get
:
private void lesen(int id){
Session session = sessionFactory.openSession();
Reihen reihe = (Reihen) session.get(Reihen.class, id);
log.info("Gelesener Datensatz: "+reihe);
session.close();
}
7
Nicht ganz genau: Aufgrund der Entitätsintegrität würde die Anweisung fehlschlagen. Die Anwei-
sung, die zu H2 geht, weicht vom protokollierten
insert
ab.