时,我有以下的类和方法如下:死锁使用Spring的事务
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@Component
@Transactional("emp")
public class EmployeeService {
}
@Component
public class HumanResourceManager {
[...]
@Autowired
private EmployeeService employeeService;
@Transactional("emp")
public void checkEmployee(Employee emp) {
[..]
employeeService.saveEmployee(emp);
[...]
}
My Spring config:
<bean id="employeeDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${employee.driverClassName}" />
<property name="url" value="${employee.url}" />
<property name="username" value="${employee.user}" />
<property name="password" value="${employee.password}" />
</bean>
<bean id="employeeSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="employeeDataSource" />
<property name="packagesToScan" value="com.xyz.employee.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${employee.dialect}</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</prop>
<prop key="hibernate.show.sql">true</prop>
</props>
</property>
</bean>
<bean id="employeeTransactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="employeeSessionFactory" />
<qualifier value="emp" />
</bean>
<tx:annotation-driven transaction-manager="employeeTransactionManager" />
我有例外org.hibernate.exception.LockAcquisitionException: ORA-00060: deadlock detected while waiting for resource
!并且在异常堆栈跟踪中,此错误发生在方法checkEmployee
。
为什么当需要默认繁殖交易时出现此错误?任何人都可以解释吗?
它没有工作。事务的传播是REQUIRED意味着该线程只有1个事务,但死锁发生意味着有超过1个事务创建,他们尝试锁定和提交DB – Barcelona 2012-08-16 08:29:33
该方法是公开的,只是我的打字错误:) – Barcelona 2012-08-16 08:38:13
是在最后一个方法中对自动装配方法的任何其他调用? – ssedano 2012-08-16 08:40:02