Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 도커
- Logback
- 구간 트리
- Zuul
- 이분 매칭
- dp
- 스프링 시큐리티
- Java
- 유레카
- spring cloud
- 주울
- 이분 탐색
- docker-compose
- 트리
- 스택
- 서비스 디스커버리
- 게이트웨이
- Spring Cloud Config
- ZuulFilter
- 달팽이
- 다익스트라
- 메모이제이션
- 완전 탐색
- Gradle
- 비트마스킹
- 플로이드 와샬
- 백트래킹
- spring boot
- BFS
- 구현
Archives
- Today
- Total
Hello, Freakin world!
User 엔티티명 Customer로 수정, Jpa Auditing 적용 본문
생각해보니 RoleType 이라는 속성도 의미가 없었다.
비회원은 User 엔티티 속성이 모두 null이여야 한다.
비회원, 회원, 관리자를 단순히 하나의 필드로 구분할게 아니라 완전히 다른 개체로 분리해야 하는건 아닌가라는 생각이 들었다.
그래서 일단 지금은 User -> Customer 로 바꾸고 RoleType 속성은 삭제하자. 비회원과 관리자는 일단 미뤄둔다.
import ...
@Getter @ToString
@NoArgsConstructor
@Entity
@EntityListeners(value = AuditingEntityListener.class)
public class Customer {
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "CUSTOMER_ID")
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String password;
@Embedded
private Address address;
@CreatedDate
private LocalDateTime createdDatetime;
@LastModifiedDate
private LocalDateTime modifiedDatetime;
@Builder
public Customer(String email, String password, Address address) {
this.email = email;
this.password = password;
this.address = address;
}
public void update(String email, String password, Address address) {
this.email = email;
this.password = password;
this.address = address;
}
}
위는 수정한 Customer 엔티티의 코드다.
그리고 엔티티 생성일과 수정일을 엔티티의 이벤트를 감지해서 자동으로 수정하는 코드가 추가됐다.
JPA Auditing 이라는 건데.
엔티티의 변경 이벤트를 체크해 @Created... @LastModifed.. 같은 애너테이션이 붙은 필드에 적절한 처리를 한다.
이걸 적용하기 전에는 엔티티 생명 주기와 관련한 콜백 메서드를 이용해서 위를 구현했었는데, 구동방식은 같아 보인다.
(스프링은 @PostPersist, @PostModified ... 와 같은 생명 주기와 관련된 메서드에 붙일 수 있는 애너테이션을 지원한다.)
그래도 이 방식이 훨씬 가독성 면에서 좋은듯.
다른 분들의 코드들처럼 날짜를 클래스로 아예 분리시켜 상속시킬까도 생각했으나 ...
흠 상속을 이용하기는 좀 꺼려지긴 한다. 자바에선 상속을 한번 밖에 적용할 수 없기 때문.
일단은 그냥 필드에 두고 필요하다면 분리하도록 하자.
'Toy Project > 쇼핑몰 만들기 프로젝트' 카테고리의 다른 글
Item 엔티티 추가 (0) | 2020.08.18 |
---|---|
고객 도메인 RESTful api 1차 완성 (0) | 2020.07.19 |
RESTful 구현 기술 선택 (0) | 2020.07.08 |
User 엔티티 작성하기 (0) | 2020.07.04 |
쇼핑몰 v1.0 설계하기 (0) | 2020.07.04 |
Comments