일단 엔티티를 수정하는 코드를 보자
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
//영속 엔티티 조회
Member memberA = em.find(Member.class, "memberA");
//영속 엔티티 데이터 수정
memberA.setUsername("hi");
memberA.setAge(10);
transaction.commit();
여기서 엔티티를 Set하는 코드만 있고, Update하는 코드는 없다.
JPA로 엔티티를 수정할때는 단순히 엔티티를 조회해서 데이터만 변경하면 된다.

순서대로 말해보자면
여기서 3번의 변경된 엔티티를 감지해서 실행된 UPDATE SQL을 보면
UPDATE MEMBER
SET
NAME=?,
AGE=?,
GRADE=?,
...
WHERE
Id=?
JPA의 기본 전략에서는 이렇게 멤버의 name,age만 수정되는것이 아니라 모든 필드를 업데이트 한다.
이렇게 모든 필드를 사용하면 전송량이 증가한다 하지만 왜 이렇게 했을까?
만약 필드가 많거나 저장되는 내용이 너무 크면
"@org.hibernate.annotation.DynamicUpdate" 어노테이션을 사용해서 수정된 데이터만 사용해서 동적으로 UPDATE SQL을 생성할 수 도 있다.
여기서 참고할 것은 이런 변경감지는 영속성 컨텍스트가 관리하는 영속상태의 엔티티에만 적용이 된다.
| JPA에서 Cascade Type을 지정하지 않으면? (0) | 2024.06.01 |
|---|---|
| [JPA/Hibernate] Flush란? (0) | 2024.05.30 |
| [JPA]엔티티 등록/ 지연등록(transactional write-behind) (0) | 2024.05.30 |
| 영속성 컨텍스트의 엔티티 조회!! (0) | 2024.05.27 |
| [JPA] 엔티티 생명 주기/영속성 컨텍스트란? (0) | 2024.05.27 |