티스토리 뷰

spring

@Column(updateable = false) 작동 확인

짱쭈니어 2025. 2. 14. 14:14

 

 

@Column(updateable = false)

  • JPA 엔티티속 수정되지 않은 컬럼에다가 @Column(updateable = false) 설정을 하곤한다. 
    • 위 애노테이션이 과연 어떻게 작동하는가? 알아보려 한다.

 

@Column(updateable = false) 테스트 코드 작성

  1. 테스트할 Customer 엔티티 생성
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Entity
public class Customer{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String firstName;

    private String lastName;

    @Column(updatable = false)
    private String createBy; //생성자

    @Column(updatable = false)
    private LocalDateTime createdDate; //생성 시간

    private String lastModifiedBy; //수정자

    private LocalDateTime lastModifiedDate; //수정 시간

  	// 테스트하기 위해서 생성, 수정시간 업데이트
    void updatePlusDay(Integer plusDay){
        createdDate = LocalDateTime.now().plusDays(plusDay);
        lastModifiedDate = LocalDateTime.now().plusDays(plusDay);
    }
}

 

2. 테스트 코드 작성

	@Test
	@Transactional
	@Rollback(value = true)
	void testCreatedDateNotUpdateAble(){
		// 1. save a new customer
		LocalDateTime now = LocalDateTime.now();
		customerRepository.save(Customer.builder()
			.firstName("star")
			.lastName("Moon")
			.build());

		// 2. DB 반영
		entityManager.flush();
		entityManager.clear();

		log.info("----- 최초 고객 정보 확인 -----");
                Customer savedCustomer = customerRepository.findById(1L);
		System.out.println(savedCustomer.toString());

		//3. 생성 시간 , 수정 시간 변경
		savedCustomer.updatePlusDay(2);

		entityManager.flush();
		entityManager.clear();

		// 4. 결과 확인
		log.info("----- 고객 정보 생성 시간 확인 -----");
		Customer checkedCustomer = customerRepository.findById(1L);
		System.out.println(checkedCustomer.toString());

		assertThat(checkedCustomer.getCreatedDate().truncatedTo(ChronoUnit.DAYS))
			.isEqualTo(now.truncatedTo(ChronoUnit.DAYS));
	}

 

3. 결과

  • updatePlusDay   메서드에서 생성,수정시간을 업데이트 치고 있다 => 하지만  @Column(updateable = false) 에 의해서 수정시간만 업데이트 된다. 
  • createDate = 2025-02-03 , lastModifiedDate  = 2025-02-05 로 수정시간만 업데이트가 되었다.

 

  • 실제 update 쿼리가 나갈때 @Column(updateable = false)  컬럼은 제외하고 수행된다. 

생성정보 컬럼 제외 업데이트쿼리로 나감

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함