-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
bugfixSomething isn't workingSomething isn't working
Description
이슈 내용
- 현재 반려동물을 등록 후, 화면에서 반려동물 list에 대해 출력한다.
- 방금 등록을 완료한 pet 객체의 경우, response의 petList에 두 번 출력된다.
- 한 번 insert시 list의 사이즈가 1이어야 하는데, 2가 됨 (임시적으로) - db에는 1개 정상적 save
- 그러나 response객체 만들기 전 petList를 한번 호출하는 경우 정상적으로 사이즈가 1이 됨
To-do
- PetList를 호출하면 왜 정상적으로 사이즈가 1이 되는지 원인 찾기
- 영속성 컨텍스트와 양방향 연관관계 시 읽기전용 컬렉션이 어떻게 동작하는지?
참고 사항
- 혼자 생각한 흐름
- Pet 객체를 생성하고, setFamily를 통해 연관 관계의 주인인 pet에서 연관관계 설정 (db에 fk가 설정된다)
- setFamily에서 편의 메서드를 통해 읽기전용 컬렉션에 family.getPetList.add(this)로 넣어줌
- 그렇다면 list에 새 객체가 들어가게 되고, 해당 객체만 조회해야 하는데 똑같은게 한 개 더 들어가있음
- save 후, 트랜잭션 종료 시 1차 캐시 flush가 진행되면서 영속성 컨텍스트와 db와 정보 동기화가 됨 (dirty checking, save)
- save시 실제 새로운 객체인지, 변경된 객체인지 select로 id를 확인하고 isNew면 persist, 아니라면 merge
- save시 매번 select 쿼리를 없애기 위해선 isNew()를 override해서 바꿔준다.
Metadata
Metadata
Assignees
Labels
bugfixSomething isn't workingSomething isn't working