0
我在回滾事務中遇到問題。下面我寫了一些bean的配置。我做了2個SQL查詢:刪除和更新。當UPDATE生成異常(外部約束)時,第一個查詢(DELETE)不會回滾。任何人都可以告訴我問題在哪裏?爲了清楚起見,我只寫了一些配置,所以如果需要更多信息,請告訴我。非常感謝!事務不會在休眠中回滾
背景:
我有方法removeUser DAO層:
public void removeUser(final Long id) {
getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
executeUpdate("delete from table1 where user_id = ?", session, id);
executeUpdate("update table2 set user_id = null where user_id = ?", session, id);
return null;
}
private void executeUpdate(String queryString, Session session, Long... params) {
SQLQuery query = session.createSQLQuery(queryString);
for (int paramIndex = 0; paramIndex < params.length; paramIndex++) {
Long param = params[paramIndex];
query.setParameter(paramIndex, param);
}
query.executeUpdate();
}
});
}
此方法從服務中調用:
public void removeUser(Long id) {
userDao.removeUser(id);
}
此服務經由彈簧構成:
<bean name="adminUserService" parent="txProxyServiceTemplate">
... setting properties ...
</bean>
<bean id="txProxyServiceTemplate" abstract="true"
class="com.xalmiento.desknet.ui.server.service.transaction.GWTTransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="remove*">PROPAGATION_NESTED</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="nestedTransactionAllowed" value="true"/>
</bean>
您正在使用哪個數據庫,並且'PROPAGATION_NESTED'只適用於某些數據庫,您是否嘗試了'PROPAGATION_REQUIRED'。 –
我們使用的是mysql 5.5.31,我們也使用org.hibernate.dialect.MySQL5InnoDBDialect – Dedyshka
確保你的表確實是InnoDB表而不是MyISAM表! –