Entity가 수정, 삭제, 조회, 삽입을 할 때 전, 후에 어떠한 작업을 하기 위해 이벤트 처리를 하는 어노테이션이다.
JPA에서는 아래의 7가지 Event를 제공한다.
@PrePersist : Persist(insert)메서드가 호출되기 전에 실행되는 메서드
@PreUpdate : merge메서드가 호출되기 전에 실행되는 메서드
@PreRemove : Delete메서드가 호출되기 전에 실행되는 메서드
@PostPersist : Persist(insert)메서드가 호출된 이후에 실행되는 메서드
@PostUpdate : merge메서드가 호출된 후에 실행되는 메서드
@PostRemove : Delete메서드가 호출된 후에 실행되는 메서드
@PostLoad : Select조회가 일어난 직후에 실행되는 메서드
-> Auditing 기술을 위해 많이 사용됨(Auditing은 추후 설명)
객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
쉽게 말해 객체 안에 있는 내용을 쉽게 보기 위해서 지정해주는 어노테이션
->callSuper = true
ToString(callSuper = true) 방식으로 사용할 수 있는데 callSuper는 부모가 가진 객체에 대해서도 사용이 가능하도록 설정하는 방식이다.
-> @ToString.Exclude
양방향 매핑시 서로가 서로를 계속 참조하여 무한루프에 빠지는 것을 막아준다.
단순히 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공한다.
직접 생성해서 사용할 일이 없으므로 추상 클래스로 만드는 것을 권장한다.
@Index(columnList = "title"),
@Index(columnList = "createdAt"),
@Index(columnList = "createdBy")
})
Index Table이란?
데이터베이스 인덱스는 추가 쓰기 및 저장 공간을 희생 하여 테이블에 대한 데이터 검색 작업의 속도를 향상시키는 데이터 구조이다. 대부분 단일 테이블에서 선택한 데이터 열의 복사본.
@table -> 엔티티와 매핑할 테이블을 지정
테이블과 테이블, 즉 객체와 객체 사이의 관계를 지정해줄 수 있는 어노테이션이다.
예를 들어 한 게시글에는 여러 댓글이 달릴 수 있는데 댓글의 domain영역에
아래와 같이 설정하여 둘의 관계를 지정해 줄 수 있다.
-> mappedby : 일대다 관계에서의 일에 해당하는 클래스가 어디인지 보여줌(일에 해당하는 클래스에 작성해줌)
-> cascade : 연쇄삭제, 즉 일의 관계가 삭제되면 그와 관계된 다른 객체들도 자동으로 삭제시켜줌
-> optional=true : FK에 not null 제약조건이 걸린 DDL이 발생한다.즉, 해당 객체가 없는 자식 개체가 있을 수 없다는 의미
기존 spring 에서는 직접 setName(), getName()과 같은 메소드를 만들어서 해당 객체를 수정하거나 불러오는 역할을 할 수 있게 했지만, 어노테이션을 사용하므로 코드의 길이를 현저하게 줄일 수 있게 되었다
getter, setter 의 사용 이유:
private로 선언한 객체에 대해서 get, set 메서드를 통해서만 접근이 가능하도록 설정한다.
@Value
@Configuration
-@ConfigurationPropertiesScan
@JoinTable(
name = "article_hashtag",
joinColumns = @JoinColumn(name = "articleId"),
inverseJoinColumns = @JoinColumn(name = "hashtagId")
)
일대다(@OneToMany) 관계일때 사용하며, '다'에 해당하는 클래스에 설정해준다. 외래키를 매핑할 때 사용한다.