소개
게시글
질문&답변
2020.02.08
중첩된 fetch join
Spring data jpa에서 @EntityGraph 를 통해서도 하나이상의 하위레벨의 fetch join이 가능한가요 ?
- 0
- 4
- 351
질문&답변
2020.02.07
중첩된 fetch join
감사합니다.
- 0
- 4
- 351
질문&답변
2020.02.07
@Transactional관련 질문 입니다.
확인되었습니다. 감사합니다.
- 1
- 4
- 969
질문&답변
2020.02.06
@Transactional관련 질문 입니다.
답변 감사합니다. 우선 class에서 @Transactional을 제거하고 Method에서도 @Transactional이 없으면 em.flush가 있는곳에서 하기와 같은 예외를 발생시킵니다. 이것은 Transaction 밖에서 em.flush를 사용하면 안된다는 의미로 생각됩니다. javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'flush' call 질문1를 확인하기 위해 우선 em.flush를 모두 삭제하고 확인을 해보니 A, B의 동작이 같았는데 makelist()에서 saveAll을 하고 db에서 값을 확인할수 있었는데 이는 saveAll 구현체에서 @Transactional을 사용해서 save 가 완료되면 트랜잭션이 종료되어 commit이 되었기 때문인것 같은데 문제는 test1에 @Transactional이 붙어 있으나 없으나 save가 되는 순간 값이 업데이트 됨을 확인하였습니다. 제가 잘 이해가 안되는게 test1 메소드에 @Transactional을 붙이면 메소드가 실행되는 순간 트랜잭션이 걸리고 메소드가 종료되는 순간 커밋이 이루어져서 db에 반영되어야 할것 같은데 트랜잭션이 안걸리고 있습니다. (save를 빼도 변경감지로 db가 자동으로 업데이트 되지도 않습니다. ) package study.querydsl.repository ; import org.junit.jupiter.api. Test ; import org.springframework.beans.factory.annotation. Autowired ; import org.springframework.boot.test.context. SpringBootTest ; import org.springframework.test.annotation. Rollback ; import org.springframework.transaction.annotation. Transactional ; import study.querydsl.entity.Member ; import java.util.ArrayList ; import java.util.List ; @SpringBootTest @Rollback ( false ) class MemberRepositoryTest { // @PersistenceContext // private EntityManager em; @Autowired private MemberRepository memberRepository ; @Test public void test () throws InterruptedException { List members = makeList() ; for (Member member : members) { test1(member.getId()) ; Thread. sleep ( 1000 ) ; } } private List makeList () throws InterruptedException { List members = new ArrayList () ; for ( int i = 0 ; i 20 ; i++) { Member member = new Member( "gon " + i , i) ; members.add(member) ; } memberRepository .saveAll(members) ; Thread. sleep ( 5000 ) ; return members ; } @Transactional protected void test1 (Long id) { Member member = memberRepository .findById(id).get() ; member.setUsername( "Park" ) ; memberRepository .save(member) ; System. out .println( "temp" ) ; } } 왜 그런건가요 ㅠ
- 1
- 4
- 969