독립 실행 형 Java 응용 프로그램의 일부로 실행되는 데이터 액세스 클래스가 있습니다. 현재 트랜잭션 관리자가 정의되어 있지만 트랜잭션의 범위를 줄이기 위해 클래스를 리팩터링하고 싶습니다. 그러나 얻을 수 있다면 org.hibernate.HibernateException : 스레드에 바인드 된 최대 절전 모드 세션이 없으며 구성이 없습니다. 여기서 트랜잭션이 아닌 트랜잭션을 생성 할 수 있습니다. 이것은 @ Transaction을 이동하면 어떻게 든 트랜잭션이 인식되는 것을 중단했음을 의미합니다.비 트랜잭션 부분을 분리하는 @Transactional 메소드를 리팩토링하는 방법
내 원래 버전은 리팩토링 된 메소드가 비공개이지만 해당 주석을 선택하지 않은 경우와 같이 공개로 변경할 것을 권장합니다. 내가 원하는 무엇
public class DoStuff {
@Transactional
public void originalMethod() {
// do database stuff
...
// do non-database stuff that is time consuming
...
}
}
는 다음
public class DoStuff {
public void originalMethod() {
doDatabaseStuff()
doNonDatabaseStuff()
}
@Transactional
public void doDatabaseStuff() {
...
}
public void doNonDatabaseStuff() {
...
}
}
거래 관리자는 어디에 있습니까? 자세한 내용을 추가 할 수 있습니까? – Chris
클래스 DoStuff가 인터페이스를 구현합니까? –
인터페이스가없고 트랜잭션 관리자는 원래 클래스에서 작동하는 것으로 정의됩니다. –