JPA Dirty Checking - open session in view
845
8 asked
public void test() {
OrderInfo orderInfo = new OrderInfo();
orderInfo.setStatus("test");
oRepo.save(orderInfo);
OrderInfo findOrderInfo = oRepo.findById(orderInfo.getId()).get();
findOrderInfo.setStatus("zzzzzzz");
}
위와 같은 코드가 있다고 할 때
Open session In view 설정과 @Transactional 에 따라서 dirty checking 되는 로직에 대해서 질문드립니다.
1.
Open Session in View : true
@Transactional : 사용 안함
Hibernate: call next value for hibernate_sequence
Hibernate: insert into order_info (status, id) values (?, ?)
Hibernate: select orderinfo0_.id as id1_0_0_, orderinfo0_.status as status2_0_0_ from order_info orderinfo0_ where orderinfo0_.id=?
2.
Open Session in View : false
@Transactional : 사용 안함
Hibernate: call next value for hibernate_sequence
Hibernate: insert into order_info (status, id) values (?, ?)
3.
Open Session in View : true
@Transactional : 사용
Hibernate: call next value for hibernate_sequence
Hibernate: insert into order_info (status, id) values (?, ?)
Hibernate: update order_info set status=? where id=?
4.
Open Session in View : false
@Transactional : 사용
Hibernate: call next value for hibernate_sequence
Hibernate: insert into order_info (status, id) values (?, ?)
Hibernate: update order_info set status=? where id=?
1 번의 경우 영속성 컨텍스트가 각각의 트랜잭션에서 끝나서 select 문이 나가는 것으로 보입니다.
2번의 경우 OSIV로 인해 영속성 컨텍스트가 끝까지 남아서 select문이 안나가는 것으로 보입니다.
3번의 경우도 OSIV와 Transaction으로 인해 영속성 컨텍스트안에 있는 객체를 가져오기에 select 문이 안나가는 것으로 보입니다. 그 후 dirty checking 으로 인해 update 문이 발생합니다.
4번의 경우 트랜잭션 범위내에 있는 영속성 컨텍스트에서 찾아오기에 select문이 안나가는 것으로 보입니다. 그 후 dirty checking 으로 인해 update 문이 발생합니다.
dirty checking 의 경우 영속성 컨텍스트가 관리하고 있는 엔티티에 대해서 스냅샷을 저장 후 변경이 되면 나가는 것으로 알고 있습니다.
그럼 이 때 2번의 경우 영속성 컨텍스트가 남아서 select문이 안나간다고 생각을 하는데 왜 dirty checking 이 안되는 이유가 있을까요??
Answer 2
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
67
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
105
3
MemberRepository 구현체
0
56
1
pdf 표현 질문드립니다.
0
60
1
로그가 남지 않는 문제.
0
79
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
70
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
71
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
91
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
45
1
하이버네이트6에서의 최적화에 이은 질문
0
82
1
save() vs saveAndFlush DB 통신 횟수
0
52
1
순수 JPA 리포지토리 코드 수정부분
0
86
2
bulk연산 후 flush하는 이유를 모르겠어요
0
150
3
bulk insert 질문입니다.
0
176
2
교만했던 것 같아요.
0
145
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
145
2
동적 테이블에 대한 질문
0
85
1
영속성 전이와 연관관계
0
130
2
강의 10:25 질문
0
73
1
단건 update 질문
0
95
2
엔티티 와 도메인의 경계
0
126
1
UsernameOnlyDto 타입 type mismatch 오류
0
119
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
136
1

