# Update, Transaktionen mit Hibernate und Spring



## DerGrinsemann (5. Juni 2007)

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!


```
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");
```


```
<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>
```


```
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


----------



## Kulabac (5. Juni 2007)

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?


----------



## DerGrinsemann (5. Juni 2007)

Eben nicht!


```
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");
	}
	
}
```


```
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();
	
}
```


----------

