인프런 커뮤니티 질문&답변

최영원님의 프로필 이미지
최영원

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

엔티티매니저 persist 와 트랜잭션 커밋 관련해서 질문드립니다.

해결된 질문

작성

·

227

0

안녕하세요. 영속성 컨텍스트와 관련해서 질문드립니다.

 

위 테스트를 실행하면 name이 마지막에 변경된 lee로 insert 쿼리가 날라갈것이라고 예상했으나 변경 전 값인 park로 insert 되었습니다.

제가 생각하는 insert 과정은 아래와 같은데 혹시 어떤게 잘못되었는지 알 수 있을까요..?
엔티티매니저의 persist로 영속성 컨텍스트에 멤버 엔티티 올림 -> 멤버 엔티티의 이름을 lee로 변경 -> 트랜잭션 커밋 -> 영속성 컨텍스트 flush -> 멤버객체(name 이 lee 인 상태)가 insert 됨.

 

추가로 변경감지도 되지 않는것 같아서 질문드립니다.

member1을 insert 하고 영속성 컨텍스트를 clear 한 뒤, 다시 select 해서 name을 변경했는데 update 쿼리가 날라가지 않네요..

jpql로 update 쿼리 짜서 하면 update 쿼리가 날라긴 합니다.. 변경감지는 왜 안되는 걸까요..?

답변 2

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 최영원님

다음 코드에서 제가 주석 처리한 부분이 있는데요. 이 부분을 확인해주세요.

public class Member {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "t_member_seq")
@Column(name = "member_no", nullable = false, updatable = false)
private Long memberNo;

@Column(name = "name", /*nullable = false, updatable = false,*/ length = 10)
private String name;

}

감사합니다.

최영원님의 프로필 이미지
최영원
질문자

엔티티 쪽을 확인을 못해봤었네요...감사합니다!

0

안녕하세요. 최영원님, 공식 서포터즈 David입니다.

.
트랜잭션을 시작하고 커밋하는 부분이 안 보이네요.

테스트 전체 코드를 보여주실 수 있으실까요?

.
감사합니다.

최영원님의 프로필 이미지
최영원
질문자

테스트 코드는 두번째 이미지가 전부입니다. @DataJpaTest에 @Transactional가 있어서 따로 트랜잭션 관련해서는 설정하지 않았습니다.

이상하네요.

혹시 쿼리랑 쿼리에 바인딩 되는 파라미터 로그 캡쳐해주실 수 있을까요?

그리고 아래 링크 참고하셔서 프로젝트를 구글드라이브로 공유 부탁드립니다.

https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.yzd7ugcaglvn

 

 

최영원님의 프로필 이미지
최영원
질문자

프로젝트 공유 : https://drive.google.com/file/d/14qtQhY7R7Jmktrq4-eYImKZ_1RwHyw_e/view?usp=sharing

 

첫번째 테스트 실행 로그 입니다.

 

두번재 테스트 실행 로그 입니다.

최영원님의 프로필 이미지
최영원

작성한 질문수

질문하기