//remove() 메서드의 [매개 변수]에는 삭제할 대상의 id가 아니라, Object가 들어 간다.
public void delete(Member member){
// JPA는 remove()라는 메서드를 제공하며,
entityManager.remove(member);
}
이렇게 정리를 해두지 않으면 헷갈릴 것 같아 정리를 해둔다.
여기서, 우리가 한 가지를 명심해 두자!!!!
JPA에서는 모~~~~~~~~든 게 해당 Transaction [내]에서 동작한다는 것이다.
-> 나는 remove(Object)를 보면서, "왜 id가 아니라, Object를 넣지?"라는 생각을 했다.
그러나 이 의문은 "remove()"라는 JPA API는 특정 Transaction [내]에서 동작을 한다" 라는 것을 명심하면 납득이 간다.
일례로 아래의 코드를 봐 보자.
@Test
@Transactional(readOnly = false) // JPA의 모든 것은 특정 Transaction [내]에서 실행됨.
@Rollback(value = false)
public void basicCRUD(){
//Transactino 시작!!!!!!!!!!!!!!
Member member1 = new Member("member1");
Member member2 = new Member("member2");
repository.save(member1);
repository.save(member2);
//삭제 검증
repository.delete(member1); // 삭제될 대상은 delete() 메서드(정확히는 repository::delete()에 있는
repository.delete(member2);//remove(Object)라는 JPA API)가 속해 있는 Transaction 내에서 저장된 [객체]여야 한다.
long delete_count = repository.count();
assertThat(delete_count).isEqualTo(2);
//Transaction 끝!!!!!!!!!!!!!!
}
고로, 객체를 매개변수로 넣어, Context에 저장돼 있는 객체와 id값을 비교하여 삭제할 객체의 대상을 특정한다.
'CS 잡지식' 카테고리의 다른 글
@NamedQuery vs @Query( JPA vs Spring Data JPA ) (0) | 2023.05.11 |
---|---|
쿼리 메서드(Feat.Spring Data JPA) (0) | 2023.05.10 |
Repository 구현 시, 주의점!!(feat.[수정] 메서드는 필요x) (0) | 2023.05.10 |
@ToString(feat. lombok) (1) | 2023.05.10 |
하이버네이트, 쿼리 파라미터 보는 법!! (1) | 2023.05.09 |