자바/JPA
[JPA] 영속성 컨텍스트가 다를때의 비교
OverTheHorizon3410
2023. 11. 19. 20:57
@Test
void transactionalEntityEqualsTest() {
Member member = new Member("테스트", null);
memberService.join(member);
Member findMember = memberService.findMember(member.getId());
System.out.println("findMember = " + findMember);
System.out.println("findMember == member = " + (findMember == member));
System.out.println("findMember.equals(member) = " + findMember.equals(member));
}
@Service
@RequiredArgsConstructor
@Transactional
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Override
@Transactional
public void join(Member member) {
memberRepository.save(member);
}
@Override
@Transactional
public Member findMember(Long id) {
return memberRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다."));
}
}
findMember = Member(id=3, name=테스트)
findMember == member = false
findMember.equals(member) = false
- 엔티티 비교의 결과
- 동일성의 비교
- 실패한다.
- 엔티티가 다른 영속성 컨텍스트에서 관리된다.
- 동등성의 비교
- Member 엔티티에 별도 EqualsAndHashCode 가 정의되어있다면 성공할 수도 있고 아닐 수도 잇음
- 이는 비지니스상의 니즈에 따라 달라진다
- DB 동등성
@Id
가 동일하다면 동등
- 동일성의 비교
왠만하면 엔티티간의 비교는 비즈니스 니즈에 따라 별도 equals and hashcode 로 비교할 것.
- DI 나 CI 값이 좋을 것 같다.
Uploaded by N2T