似乎Spring忽略了服务类上的@Transactional注解。我在SO上阅读了一些问题和回答以及博客, 但没有一个选项适用于我。
任何想法或建议?
- 我没有调用私有方法——我调用的是接口上公开的公共方法。
- 我调用的是另一个类的方法(即不是从同一个类中调用的)。
- 我的“服务”类被注释为
@Component
和@Transactional
。 - 我的“服务”类具有一个接口,并使用该接口和
@Inject
注释进行注入。 - 我尝试添加
proxy-target-class="true"
,如此处的一个答案所述,但没有成功。 - 我使用JAX-RS(而不是spring-mvc)。
当我遇到以下异常时,错误发生在DAO层上,带有@Transactional(propagation = Propagation.MANDATORY)
注解:
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);
}
}
任何想法或建议?