Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

반려동물 등록 후 pet 객체가 petList에 중복되는 이슈 #86

Open
2 tasks
bbeomgeun opened this issue Oct 7, 2022 · 0 comments
Open
2 tasks
Assignees
Labels
bugfix Something isn't working

Comments

@bbeomgeun
Copy link
Contributor

이슈 내용

  • 현재 반려동물을 등록 후, 화면에서 반려동물 list에 대해 출력한다.
  • 방금 등록을 완료한 pet 객체의 경우, response의 petList에 두 번 출력된다.
  • 한 번 insert시 list의 사이즈가 1이어야 하는데, 2가 됨 (임시적으로) - db에는 1개 정상적 save
  • 그러나 response객체 만들기 전 petList를 한번 호출하는 경우 정상적으로 사이즈가 1이 됨

To-do

  • PetList를 호출하면 왜 정상적으로 사이즈가 1이 되는지 원인 찾기
  • 영속성 컨텍스트와 양방향 연관관계 시 읽기전용 컬렉션이 어떻게 동작하는지?

참고 사항

  • 혼자 생각한 흐름
  1. Pet 객체를 생성하고, setFamily를 통해 연관 관계의 주인인 pet에서 연관관계 설정 (db에 fk가 설정된다)
  2. setFamily에서 편의 메서드를 통해 읽기전용 컬렉션에 family.getPetList.add(this)로 넣어줌
  3. 그렇다면 list에 새 객체가 들어가게 되고, 해당 객체만 조회해야 하는데 똑같은게 한 개 더 들어가있음
  4. save 후, 트랜잭션 종료 시 1차 캐시 flush가 진행되면서 영속성 컨텍스트와 db와 정보 동기화가 됨 (dirty checking, save)
  • save시 실제 새로운 객체인지, 변경된 객체인지 select로 id를 확인하고 isNew면 persist, 아니라면 merge
  • save시 매번 select 쿼리를 없애기 위해선 isNew()를 override해서 바꿔준다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugfix Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant