티스토리 뷰
@Column(updateable = false)
- JPA 엔티티속 수정되지 않은 컬럼에다가 @Column(updateable = false) 설정을 하곤한다.
- 위 애노테이션이 과연 어떻게 작동하는가? 알아보려 한다.
@Column(updateable = false) 테스트 코드 작성
- 테스트할 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) 컬럼은 제외하고 수행된다.
'spring' 카테고리의 다른 글
Spring AOP 가 필요한 경우, 무엇인가, 관련 용어 (0) | 2025.04.15 |
---|---|
Redis +Spring Cache 조회했을때 성능비교 (2) | 2025.02.14 |
M:N 다대다 연관 관계 (0) | 2025.02.10 |
객체 연관관계, 영속성 컨텍스트 (0) | 2025.02.10 |
spring 초기 셋팅,프로젝트 jdk설정 (0) | 2021.12.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- web
- 자바
- set
- 파이썬
- 스프링
- UML
- 객체지향
- eclipse
- 코딩
- 백엔드
- 다이어그램
- laravel
- sql
- java
- 이클립스
- 깃
- 모델링
- 파이썬기초
- 레이아웃
- 코드업
- 유스케이스
- 코드업기초
- 개인프로젝트
- sourcetree
- 기초100제
- 자바기초
- 안드로이드
- JPA
- 객체지향모델링
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함