업데이트 쿼리를 작성하지 않아도 update 를 할 수 있는 방법이 있습니다.
EntityMenager를 DataJpa에서 사용을 하는데
실제로 코드를 보시면 별도로 데이터베이스에 save 하지 않습니다.
EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin(); //트랜잭션 시작
Pay pay = em.find(Pay.class, id);
pay.changeTradeNo(tradeNo); // 엔티티만 변경
tx.commit(); //트랜잭션 커밋
엔티티 값이 변경되면 DirtyChecking을 합니다.
JPA에서 트랜젝션이 끝나는 시점에 변화가 있는 모든 엔티티를 DB에 반영해줍니다.
트랜젝션이 끝나는 시점에 Update Query르르 실행합니다.
이는 영속성 컨텍스트가 관리하는 엔티티만 적용됩니다.
다만 준영속/비영속 엔티티는 DirtyChecking을 하지 않습니다.
그렇다면 일부만 update하고 싶다면?
기본적으로 모든 필드를 update를 하는데 만약 테이블에 필드가 50개가 넘어간다면 매번 update를 전부 하는데는 어려움이 있습니다.
그래서 이럴 경우에는 @DynamicUpdate
로 변경 필드만 반영하게 합니다.
@Getter
@NoArgsConstructor
@Entity
@DynamicUpdate // 변경한 필드만 대응
public class Pay {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private long amount;
이런식으로 Entity를 선언해주면 일부만 바뀌어도 Update쿼리에 반영됩니다!
Reference : https://jojoldu.tistory.com/415?category=637935