Spring 为什么在使用aspectJ模式事务时没有事务?
我有这样的服务层:Spring 为什么在使用aspectJ模式事务时没有事务?,spring,spring-data-jpa,spring-aspects,Spring,Spring Data Jpa,Spring Aspects,我有这样的服务层: @Service @Transactional public class TransactionService { @Autowired private TransactionDao dao; @Transactional(propagation = Propagation.REQUIRED) public void A() { ... B(); } @Transactional(propa
@Service
@Transactional
public class TransactionService {
@Autowired
private TransactionDao dao;
@Transactional(propagation = Propagation.REQUIRED)
public void A() {
...
B();
}
@Transactional(propagation = Propagation.REQUIRED_NEW)
public void B() {
dao.save()
}
}
使用此配置:
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<tx:annotation-driven transaction-manager="transactionManager" />
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">${show.sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hbm2ddl.auto}</prop>
</props>
</property>
使用aspectj模式需要编译或加载时编织。这不是一个简单的切换模式的问题,它需要更多。我找到了教程,它们不使用任何编织。是的,他们有。。。这是由
spring configured
标记启用的,因为这也需要编织。如果没有编织,它将无法工作,否则您必须使用代理。spring配置的注释是否足够?它有什么作用?我不需要实现我的方面(在方法执行之前/之后?)等等吗?你不需要实现任何东西。。。您需要为spring方面使用编译时编织或提前期。。。
<tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" />
SEVERE: Servlet.service() for servlet [ name ] in context with path [/name-services] threw exception [Request processing failed; nested exception is javax.persistence.TransactionRequiredException: No transactional EntityManager available] with root cause
javax.persistence.TransactionRequiredException: No transactional EntityManager available
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:273)