를 사용할 때 아래로 다음과 같은 클래스와 방법이 있습니다교착 상태 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
에서 발생했습니다.
기본 거래 전파가 필수 일 때이 오류가 발생하는 이유는 무엇입니까? 아무도 이것을 설명 할 수 있습니까?
작동하지 않습니다. 트랜잭션의 전파가 필요하다는 것은 해당 스레드에 대한 트랜잭션이 하나만 있음을 의미하지만 교착 상태가 발생하면 트랜잭션이 두 개 이상 생성되어 DB를 잠그고 커밋하려고 시도합니다. – Barcelona
메서드가 공용이고 내 입력 오류입니다. – Barcelona
Are 마지막 메서드에서 autowired 메서드에 대한 다른 호출? – ssedano