롤백 트랜잭션에 문제가 있습니다. 아래에서는 콩의 구성 중 일부를 작성했습니다. 나는 2 개의 SQL 쿼리를 수행한다 : 삭제와 업데이트. 그리고 UPDATE가 예외 (외국 ket 제약)를 생성하면 첫 번째 쿼리 (DELETE)는 롤백되지 않습니다. 아무도 문제가있는 곳을 말해 줄 수 있습니까? 나는 명확성을 위해서 구성의 일부만을 썼다. 더 많은 정보가 필요하다면 알려주기 바란다. adnvance에 감사드립니다!최대 절전 모드에서 트랜잭션이 롤백되지 않습니다.
CONTEXT :
I이 방법 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
테이블이 MyISAM 테이블이 아니라 실제로 InnoDB 테이블인지 확인한다! –