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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions