Hallo Ihr,
ich weiß langsam nicht mehr, wo ich noch suchen soll. Trotz eines Rollbacks aufgrund einer RuntimeException werden die Daten in der Datenbank gespeichert. Warum nur?
Ich habe eine Webapplication mit JSF, Spring, JPA und Hibernate. In einer Methode der Service-Bean schreibe ich einige Datensätze mit getJpaTemplate().persist(track). Dann tritt darin eine von RuntimeException abgeleitete Exception auf. Der Rollback wird ausgelöst. Dies funktioniert laut Logfile auch. Trotzdem befinden sich danach die Daten in der Datenbank. :-(
Hier meine applicationContext.xml:
Danke für jede Hilfe,
Titus
ich weiß langsam nicht mehr, wo ich noch suchen soll. Trotz eines Rollbacks aufgrund einer RuntimeException werden die Daten in der Datenbank gespeichert. Warum nur?
Ich habe eine Webapplication mit JSF, Spring, JPA und Hibernate. In einer Methode der Service-Bean schreibe ich einige Datensätze mit getJpaTemplate().persist(track). Dann tritt darin eine von RuntimeException abgeleitete Exception auf. Der Rollback wird ausgelöst. Dies funktioniert laut Logfile auch. Trotzdem befinden sich danach die Daten in der Datenbank. :-(
Code:
@Transactional(readOnly=false)
public void saveFromPlaylist(InputStream is, Volume volume, boolean compilation) throws PlaylistException {
...
getJpaTemplate().persist(track);
...
}
Code:
...
DEBUG: about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
Hibernate: insert into reviews_track (created_on, version, artist, length, number, title, volume_id) values (?, ?, ?, ?, ?, ?, ?)
2009-04-01 21:31:07,734 org.hibernate.jdbc.AbstractBatcher logClosePreparedStatement
DEBUG: about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2009-04-01 21:31:07,750 org.hibernate.transaction.JDBCTransaction rollback
DEBUG: rollback
2009-04-01 21:31:07,750 org.hibernate.transaction.JDBCTransaction toggleAutoCommit
DEBUG: re-enabling autocommit
2009-04-01 21:31:07,750 org.hibernate.transaction.JDBCTransaction rollback
DEBUG: rolled back JDBC Connection
2009-04-01 21:31:07,750 org.hibernate.jdbc.ConnectionManager aggressiveRelease
DEBUG: aggressively releasing JDBC connection
2009-04-01 21:31:07,750 org.hibernate.jdbc.ConnectionManager closeConnection
DEBUG: releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
Hier meine applicationContext.xml:
Code:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/MyDB" />
</bean>
<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="trackService" class="de.domain.service.TrackServiceJPAImpl">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
...
</beans>
Danke für jede Hilfe,
Titus
Zuletzt bearbeitet: