2009-05-20 4 views
1

Wenn ich eine Instanz eines Persistenz-Objekt, und ich setze einige Mitglieder in etwa so:Wird der Ruhezustand die Datenbank aktualisieren, wenn eine Persistenzinstanz festgelegt, aber nicht geändert wurde?

MyThing thing = session.get(MyThing.class, id); 
thing.setSomething(thing.getSomething()); 
session.update(thing); 

Werde diese Hibernate tatsächlich dazu führen, einen SQL-Update-Befehl zu aktualisieren, um die Aufzeichnung zu erteilen? Oder ist der Winterschlaf intelligent genug, um zu wissen, dass das Objekt aktualisiert wurde, aber die Werte sich nicht geändert haben?

+0

Sie sind hier rein Hibernate oder mit JPA Ruhezustand? –

Antwort

2

Im Allgemeinen sollte es keine Aktualisierung ausgeben, wenn die Eigenschaftswerte gleich sind. (Genauer gesagt, vergleichen Sie die Werte entsprechend ihrer Type-Implementierung, die normalerweise mit ihrer Equal (Object) -Methode übereinstimmt).

Nemo hatte Recht, Sie sollten immer wissen, was SQL Hibernate ausführt. Obwohl ich empfehle, den 'org.hifernate.SQL' Logger ('net.sf.hibernate.SQL' für Hibernate 2) auf die DEBUG-Ebene (in log4j) zu setzen, anstatt die Eigenschaft "show_sql" (die immer in System.out schreibt) zu verwenden oder System.err iirc).

(Obwohl ich glaube, Sie session.flush() gemeint, nicht session.update(thing) ... es sei denn, Sie eine Stateless Session verwenden?)

1

Ich glaube, es wird schlau genug zu erkennen, dass das Objekt nicht geändert wurde, so dass das Update zu vermeiden.

Der sicherste Weg ist, die SQL-Ausgabe für Hibernate zu aktivieren. In

<property name="hibernate.show_sql">true</property> 

Zum sitzungs Fabrik Abschnitt von Hibernate-Konfiguration in Ihrem hibernate.cfg.xml.

0

AFAIK, es wird keinen SQL-Befehl ausführen.

Verwandte Themen