다음 코드 조각을 참조하십시오.@ Transactionaction이 커밋을 수행하지 않습니다.
@Transactional
public void saveMembersService(List<Member> list1, List<Member> list2)
{
saveMembersDAO(list1); // does not perform commit. Why?
saveMembersDAO(list2); // does not perform commit. Why?
} // does perform commit only here!
@PersistenceContext
private EntityManager em;
@Transactional
public void saveMembersDAO(List<Member> members)
throws HibernateException
{
Iterator<Member> it = members.iterator();
while (it.hasNext())
{
Member wsBean = it.next();
em.persist(wsBean); // overall commit will be made after method exit
}
}
저는 DB로 MySQL을 사용합니다. 위의 메서드 실행 후 MySql 로그를 봅니다. 하지만 난 saveMembersService 메서드 실행 후 커밋을 볼 수 있습니다. 두 개의 트랜잭션 메소드 호출마다 두 개의 커밋이 표시됩니다. 내가 어디서 잘못한거야?
업데이트 1 : 죄송합니다. 서비스 방법에 @Transactional을 (를) 추가하는 것을 잊어 버렸습니다. 그것은
UPDATE 수정되었습니다 2 : 나는 DAO에 대한 Propagation.REQUIRES_NEW 속성을 검사 한 - @Transactional을 사용하면 결과가
제발 내 업데이트를 참조하십시오. –
사실 나는 Propagation으로 확인했습니다. DAO의 REQUIRES_NEW 속성 - 결과가 동일합니다 (서비스 메소드에서 @Transactional과 함께 사용) –
아직 단일 커밋 만 있습니까? –