Skip to content

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

@bbeomgeun

Description

@bbeomgeun

이슈 내용

  • 현재 반려동물을 등록 후, 화면에서 반려동물 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해서 바꿔준다.

Metadata

Metadata

Assignees

Labels

bugfixSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions