事务不在hibernate中回滚

时间:2013-11-25 08:02:48

标签: java sql spring hibernate transactions

我遇到了回滚事务的问题。下面我写了一些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>

1 个答案:

答案 0 :(得分:0)

尝试

<prop key="remove*">PROPAGATION_REQUIRED</prop>

我认为所有数据库服务器都不支持该事务。