Entity Annotation
Entity Annotation | |
@Entity | 데이터 베이스 |
@Table | 명칭을 따로 정해줄 수 있다. |
@Id | PK 값을 꼭 정해주어야한다. |
@GeneratedValue | 자동으로 증가하는 값을 설정해준다. @GeneratedValue(strategy= GenerationType.IDENTITY) IDENTITY => MySql 테이블마다 해당 아이디 값을 auto로 증가시켜준다. 기본으로 어노테이션만 주었을 경우, 같은 시퀀스 객체를 사용하게되어 다른 테이블이 증가할때 동시 증가할수 있음. |
@ Column | name 속성 으로 별도의 데이터 이름을 지정 할 수 있다. nullable = false => not null 컬럼을 만들어준다. updatable/ insertable 속성 = false => 저장과 없데이트 시 해당 값을 저장할 지 않할지 지정이 가능하다. |
@Transient | 디비 레코드와의 별개의 객체에서 사용되는 데이터 선언 |
@Enumerated | Enum 을 사용할 경우 타입을 STRING으로 해주어야한다. ex) @Enumerated(value= EnumType.STRING) |
Entity Listener
이벤트를 감시 하다가 발생하면 실행시키는 것.
Entity Listener | |
@PrePersist | insert 메서드 호출 전 실행되는 메서드 |
@PreUpdate | marge 메서드 호출 전 실행 |
@PreRemove | delete 메서드 호출 전 실행 |
@PostPersist | insert 메서드 호출 후 실행되는 메서드 |
@PostUpdate | marge 메서드 호출 후 실행 |
@PostRemove | delete 메서드 호출 후 실행 |
@PostLoad | select 조회가 호출된 후 실행 |
@EntityListeners |
※ 동일하게 반복되는 객체 속성을 한 곳에서 공통화 처리
ex) 객체 생성 및 수정시 => 생성날짜 및 업데이트 날짜 수정
1. 직접 생성하여 사용
@EntityListeners 사용.
@EntityListeners(value=객채.class)
1) 인터페이스 생성
- 여러 클래스에서 반복되는 동일한 필드의 getter/setter 메서드
ex) create_at (생성일), update_at (업데이트일)
📑 Auditable
2) Class 생성
- 객체 생성 호출 전/후 공통으로 이루어져야하는 내용을 담은 클래스
ex) 객체 생성 시 생성일, 업데이트일이 기록되어야함
📑 MyEntityListener
@PrePersist
public void prePersist(Object o){
if(o instanceof Auditable){
(Auditable) o.setCreatedAT(LocalDateTime.now())
}
}
3) 해당 필드를 사용하는 클래스 설정
- 인터페이스 상속
- 클래스에 @EntityListeners 어노테이션 선언 및
...
@EntityListeners(value = MyEntityListener.class)
public calss User implement Auditable{
...
}
2. JPA 에서 제공하는 기능 사용
MyEntityListener를 JPA에서 자동으로 생성하여 준다.
1) Application 에서 @EnableJpaAuditing 어노테이션 추가
2) 인터페이스 생성
- 여러 클래스에서 반복되는 동일한 필드의 getter/setter 메서드
ex) create_at (생성일), update_at (업데이트일)
📑 Auditable
3) Entity 객체에 설정
- @EntityListeners => AuditingEntityListener 클래스 사용
: 객체 생성 호출 전/후 공통으로 이루어져야하는 내용을 담은 클래스 (JPA에서 자동 생성)
- 공통으로 사용되는 부분에 해당되는 어노테이션 추가
생성 관련 @CreatedDate , @CreatedBy / 수정 관련 @LastModifiedDate, @LastModifiedBy / ...
..
@EntityListeners(value = AuditingEntityListener.class)
public calss User implement Auditable{
..
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
3. 슈퍼클래스를 통한 공통화 ⭐⭐
1) Application 에서 @EnableJpaAuditing 어노테이션 추가
2) 인터페이스 생성
- 여러 클래스에서 반복되는 동일한 필드의 getter/setter 메서드
ex) create_at (생성일), update_at (업데이트일)
📑 Auditable
3) 공통 사용하는 필드만 포함된 클래스 생성
- @MappedSuperclass 선언
: 해당클래스의 필드를 상속받는 Entity의 컬럼으로 포함시키겠다는 의미.
- @EntityListeners => AuditingEntityListener 클래스 사용
: 객체 생성 호출 전/후 공통으로 이루어져야하는 내용을 담은 클래스 (JPA에서 자동 생성)
@Date
@MappedSuperclass
@EntityListeners(value=AuditingEntityListener.class)
public class BaseEntity{
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
4) Entity 객체에 설정
- 해당 필드를 사용하는 클래스에서 부모 클래스로 상속
@ToString(callSuper = true) : 상속 받는 클래스 까지 toString
@EqualsAndHashCode(callSuper = true) : EqualsAndHashCode를 비교 하겠다는 의미
@NoArgsConstructor
@Date
@Entity
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class User extends BaseEntity implements Auditable{
...
}
'BackEnd > Security · JPA' 카테고리의 다른 글
[ JPA ] Transaction (0) | 2023.03.30 |
---|---|
[ JPA ] 영속성 컨텍스트와 Entity 생애주기 (0) | 2023.03.29 |
[ JPA ] 연관관계 - ERD (0) | 2023.03.29 |
[ JPA ] 쿼리메서드 - 페이징 (0) | 2023.03.20 |
[ JPA ] 기본 메서드를 사용한 쿼리 - CRUD · Page (0) | 2023.03.16 |