minlog
article thumbnail

 

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{
...
}

 

 

 

 

 

profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!