Transaktionsspeicherung ohne Aufruf der Update-Methode
Habe ich eine Methode annotiert mit @Transactional. Ich abrufen eines Objekts aus meiner Oracle-DB, ändern Sie ein Feld, und dann der Rückkehr aus der Methode. Ich habe vergessen, das Objekt zu speichern, aber entdeckt, dass die Datenbank aktualisiert wird, sowieso.
Datei ApplicationContext
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
meine Methode
@Transactional
public void myMethod(long id) {
MyObject myObj = dao.getMstAttributeById(id);
myObj.setName("new name");
//dao.update(myObj);
}
meine Frage ist, warum tut MyObject bekommen, persistent in die Datenbank?
InformationsquelleAutor der Frage John LaFleur | 2011-11-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil hibernate erkennt automatisch änderungen an persistent Entitäten und aktualisiert die Datenbank entsprechend. Dieses Verhalten ist dokumentiert in Kapitel 11 der hibernate-Referenz-Handbuch. Der relevante Teil lautet:
InformationsquelleAutor der Antwort meriton
Wenn Sie eine JPA, als die Spezifikation sagt, dass, wenn Sie als juristische Person in verwalteten Staat (und das ist, was Sie tun, durch das Holen der Daten aus dem DAO-innerhalb einer aktiven Transaktion), werden alle geänderten gemacht, es wird in der Datenbank widergespiegelt werden während der Transaktion commit -.
So, in anderen Worten - ist es eigentlich egal, rufen Sie update-operation oder nicht, weil die Transaktion commit Spülen Sie die änderungen an der Datenbank.
InformationsquelleAutor der Antwort Piotr Nowicki
Fand ich verhindern der automatischen updates der Datenbank ist ein zwei-Schritt Prozess.
Schritt I: :
Schritt II :
InformationsquelleAutor der Antwort Sagar Kapadia