0
스프링처럼 서비스 클래스에서 @Transactional 어노테이션을 무시합니다. 나는 약간의 q&a on SO과 blogs을 읽었지만 어떤 옵션도 저에게 효과가없는 것 같습니다.Spring이 @Transactional 어노테이션을 무시합니다.
- 나는 private 메소드를 호출하지 않습니다. 공용 메소드를 공용 인터페이스에서 호출합니다.
- 다른 클래스에서 메소드를 호출하고 있습니다 (즉, 같은 클래스에서 호출하지 않음).
- 내 "서비스"클래스는
@Component
및@Transactional
으로 주석되어 있습니다. - 내 "서비스 클래스는 인터페이스를 가지고, 나는 인터페이스를 사용하여 주입하고있어, 및
@Inject
주석 - 내가 대답 중 하나에 여기에 설명 된대로
proxy-target-class="true"
을 추가하는 시도 -이.. 작동하지 않았다 - I을 'JAX-RS를 이용하여 M (봄 - MVC 생략)
를 오류가 I이 예외 가면 @Transactional(propagation = Propagation.MANDATORY)
으로 어노테이션 DAO 층에서 발생 :.
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'
을 다음은 관련된 클래스와 인터페이스를 나타내는 일반적인 코드입니다.
public interface IService<T extends BaseEntity> {
void save(T entity);
}
public abstract class AbstractService<T extends BaseEntity> implements IService<T> {
@Inject
private IDao dao;
@Override
public void save(T entity) {
dao.save(entity);
}
}
public interface IPersonService extends IService<PersonEntity> {
void saveAll(List<PersonEntity> persons);
}
@Component
@Transactional
public class PersonService extends AbstractService<PersonEntity> implements IPersonService {
@Override
public void saveAll(List<PersonEntity> persons) {
for (PersonEntity person : persons) {
super.save(person);
}
}
}
@Component
public class PersonApi {
@Inject
private IPersonService personService;
public void saveAll(...) {
...
personService.saveAll(persons);
}
}
아이디어가 있습니까?
동일한 클래스에서 메소드를 호출하는 경우에는 아무런 문제가 없습니다. AOP는 내부 메소드 호출이 아닌 외부 메소드 호출에서만 작동합니다. 그러나 코드를 추가하지 않았으므로 오류가 어디에 있는지 알 수 없습니다. –
그것이 작동하지 않는다고 생각하는 이유는 무엇입니까? 몇 가지 코드를 공유 할 수 있습니까? – Leffchik
같은 클래스의 메서드를 호출하지 않습니다. 내가 말했듯이, 나는 그것의 인터페이스를 사용하여 서비스를 주입하고 있는데, 나는 그것을 인터페이스를 사용하여 호출한다. 일부 코드 샘플을 제공하기 위해 노력하고 있습니다 ... –