我遇到了回滚事务的问题。下面我写了一些bean的配置。我做2个SQL查询:删除和更新。当UPDATE生成异常(外部约束的约束)时,第一个查询(DELETE)不会回滚。谁能告诉我问题出在哪里?为了清楚起见,我只写了一些配置,所以如果需要更多信息,请告诉我。谢谢你的支持!
背景:
我有DAO图层,方法是removeUser:
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);
}
此服务通过spring配置:
<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>
答案 0 :(得分:0)
尝试
<prop key="remove*">PROPAGATION_REQUIRED</prop>
我认为所有数据库服务器都不支持该事务。