스프링 MC 컨트롤러가있는 웹 응용 프로그램이 있습니다. 이러한 컨트롤러는 JPA, 엔티티 및 리포지토리와 함께 DB와 상호 작용합니다.컨트롤러에서 예외가 발생하면 JPA 롤백 트랜잭션이 발생합니다.
컨트롤러 메소드가 스프링 mvc에 의해 처리 될 때 프로세스 중에 예외가 발생하면 해당 메소드 중에 추가되는 모든 DB 변경 사항이 롤백됨을 확인하고 싶습니다. 여기에 예를
:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
컨트롤러
@Controller
public class JpaTest {
@Autowired
GroupRepository groupRepository;
@RequestMapping(value = "/{langId}/jpatest", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@Transactional
public String test() throws Exception {
Group group = new Group();
group.setName("jpaTest");
groupRepository.save(group);
throw new Exception("MY EXCEPTION ");
}
}
나는 그룹이 DB에 추가되지 않습니다 기대!
나는 @Transactional이 그것을 만들었지 만 좋지 않을 것이라고 희망한다.
나는<tx:annotation-driven transaction-manager="transactionManager" />
그러나 어떤 효과를 추가했습니다. 간단하게 처리 할 수있는 방법이 있습니까?
가 아니면 우리가 지브와 함께했던 것처럼 내 디스패처 서블릿, 슈퍼 트랜잭션 관리의 종류를 가지고 캡슐화 수 :
protected void doDispatch(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
JeevesDispatcherServlet.super.doDispatch(request, response);
TransactionManager.runInTransaction("jeevesDispatchServlet", getWebApplicationContext(),
TransactionManager.TransactionRequirement.CREATE_ONLY_WHEN_NEEDED,
TransactionManager.CommitBehavior.ONLY_COMMIT_NEWLY_CREATED_TRANSACTIONS,
false, new TransactionTask<Void>() {
@Override
public Void doInTransaction(TransactionStatus transaction) throws Throwable {
JeevesDispatcherServlet.super.doDispatch(request, response);
return null;
}
});
}
댓글이어야합니다. – zero01alpha