Update, Transaktionen mit Hibernate und Spring

DerGrinsemann

Mitglied
Hallo!

Bei folgenden Code wird IMMER ein Update auf der DB durchgeführt und version um eins erhöht (Optimistische Sperre)! Warum? Ich klammere das ganze in einer Transaction (siehe Konfig) ! Aber die Transaktion wird schon beim "findPersonById" wieder geschlossen!

Code:
logger.debug("********************* FIND");
Person person = this.personManager.findPersonById(personEditForm.getId());
logger.debug("********************* FIND ENDE");
logger.debug("********************* UPDATE");
this.personManager.updatePerson(person);
logger.debug("********************* UPDATE ENDE");

Code:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="find*" propagation="REQUIRED" read-only="true"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

<aop:config proxy-target-class="false">
<aop:advisor pointcut="execution(* at.brisk.jazz.manager.hibernate.PersonManager.*(..))" advice-ref="txAdvice"/>
</aop:config>

Code:
2007-06-05 12:33:18,935 DEBUG org.hibernate.impl.SessionImpl.afterTransactionCompletion(SessionImpl.java:422) - after transaction completion
2007-06-05 12:33:18,936 DEBUG at.brisk.jazz.controller.PersonEditController.onSubmit(PersonEditController.java:72) - ********************* FIND ENDE
2007-06-05 12:33:18,936 DEBUG at.brisk.jazz.controller.PersonEditController.onSubmit(PersonEditController.java:80) - ********************* UPDATE

Bin für jeden Tipp dankbar!

Marco Markl
 
Naja, der Fehler liegt offensichtlich in der Methode findPersonById(). Wird dort auch eine Transaktion benutzt um aus der Datenbank zu lesen? Oder evtl. die Hibernate-Session geschlossen?
 
Eben nicht!

Code:
package at.brisk.jazz.manager.hibernate;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import at.brisk.jazz.domain.Person;
import at.brisk.jazz.manager.PersonManagerInterface;

public class PersonManager extends HibernateDaoSupport implements PersonManagerInterface {
	
	public void InsertPerson(Person person) {
		this.getHibernateTemplate().save(person);	
	}

	public void updatePerson(Person person) {
		this.getHibernateTemplate().update(person);
	}
	
	public void deletePerson(Person person) {
		this.getHibernateTemplate().delete(person);	
	}
	
	@SuppressWarnings("unchecked")
	public Person findPersonById(String id) {
		return (Person) this.getHibernateTemplate().get(Person.class, id);
	}
	
	@SuppressWarnings("unchecked")
	public List<Person> findAllPersons() {
		return (List<Person>) this.getHibernateTemplate().find("from Person");
	}
	
}

Code:
package at.brisk.jazz.manager;

import java.util.List;
import at.brisk.jazz.domain.Person;

public interface PersonManagerInterface {
	
	public void InsertPerson(Person person);

	public void updatePerson(Person person);
	
	public void deletePerson(Person person);
	
	public Person findPersonById(String id);
	
	public List<Person> findAllPersons();
	
}
 
Zurück