Spring boot에서 EntityManager를 사용하여 Transaction 사용 시 오류 질문드립니다.
761
작성한 질문수 3
안녕하세요 급 호기심에 Spring boot 에서 EntityManager를 사용하여 명시적으로 트랜잭션을 사용해보았는데요.
아래와 같은 오류가 떠서 질문드립니다
트랜잭션 템플릿을 사용해서 실행시켰을 떄는 오류없이 잘되었는데, EntiyManager를 사용해서 트랜잭션을 사용하면 위와 같은 에러가 출력되는 이유가 궁금합니다 !!
테스트한 코드는 아래와 같습니다.
(예제 코드를 코틀린으로 올린 점 죄송합니다 ㅠㅠ)
감사합니다 !!
답변 4
1
네 광훈님
JPA 강의 처음을 떠올려 보시면
persistence.xml 에서 데이터베이스 커넥션 정보를 입력했던 것이 기억나실 거에요.
이 방법으로 사용하면 JPA를 순수하게 사용할 수 있고, 데이터베이스 커넥션이나 트랙잭션도 JPA 인터페이스를 통해서 바로 사용할 수 있습니다.
반면에 @PersistenceContext나 @PersistenceUnit 등으로 JPA와 관련된 emf, em을 조회하게 되면 이것은 스프링을 통해서 생성하게 됩니다. 그리고 스프링이 관리하는 트랜잭션과 데이터베이스 커넥션을 사용하게 됩니다.
스프링은 통합 기술이기 때문에 이렇게 하면 같은 트랜잭션을 JPA도 사용하고 일반 JDBC에서도 함께 트랜잭션을 묶어서 사용할 수 있습니다.
스프링은 LocalContainerEntitymanagerFactorybean 이라는 클래스로 엔티티 메니저를 초기화하고 생성하고, JPATransactionManager를 통해서 스프링의 트랜잭션을 통합해서 관리합니다. 그리고 데이터베이스 커넥션 정보도 DataSource를 통해서 생생해야 합니다. (https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#orm-jpa)
마지막으로 이 3가지를 서로 묶어줍니다.
원래는 이런 과정을 개발자가 직접 설정해야 하지만 스프링 부트가 편리하게 도와주는 것이지요.
이런 내용들은 다음에 스프링 데이터 접근 기술 강의(https://www.inflearn.com/roadmaps/373)에서 자세히 설명드릴 예정입니다.
감사합니다.
0
선생님 늦은 밤 친절한 답변 감사합니다 !!
마지막으로 스프링과 JPA를 함께 사용하면 스프링이 제공하는 트랙잭션 매니저를 사용하는 이유에 대해서 알 수 있을까요 ??
혹은 참고할만한 문서 링크 첨부해주시면 정말 감사하겠습니다 ㅠㅠ
0
안녕하세요. 광훈님
스프링과 함께 JPA를 사용하게 되면, 스프링이 제공하는 트랜잭션 메니저를 통해서 트랜잭션을 사용해야 합니다.
순수하게 JPA를 직접 사용하고, 트랜잭션도 스프링을 사용하지 않고, JPA 트랜잭션을 직접 사용할 때 해당 코드를 사용하시면 됩니다.
감사합니다.
실무 조언 관련 질문입니다.
0
40
1
H2데이터베이스 파일 생성
0
48
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
46
1
JPQL 메소드와 락
0
49
1
Delivery @OneToOne
0
55
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
85
2
UnsupportedOperationException 발생
0
80
3
H2 Database 연결이 안됩니다.
0
87
2
연관관계 매핑 질문드립니다.
0
79
2
h2데이터베이스 실행오류
0
103
2
persistence.xml
0
101
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
76
1
영속성 컨텍스트
0
61
1
JPA 프록시
0
87
1
Native Query와 MyBatis
0
62
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
81
1
임베디드 타입 예시 코드 관련 질문
0
110
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
89
3
인텔리제이 패키지 커서 단축키 질문
0
104
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
134
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
67
1
임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.
0
95
1
데이터베이스가 초기화되는 것 같아요
1
173
2





