태태개발일지(JPA)
JPA?(java persistance api)
jap
-hibernate
-eclipse LInk
Spring Data jpa?
- hibernate를 조금 더 간편하게 사용하기 위해서 추상화를 한번더 한 것.
Spring Flow
aplication 과 RDB를 연결해주는 것을 ORM개념이라고 한다.
Java에서는 ORM표준을 JPA라는 것을 interface로 정의하여 제공하고있는데
자주쓰는 hibernate를 한번더 추상화시킨것이 Spring data jpa이다.
(가장중요한 ENTITY의 기본 속성)
@Entity -> 해당 클래스가 데이터베이스의 기본이 되는 엔티티임을 선언.
@Table -> class네임과 다르게 실제 데이터베이스 테이블 이름을 지정해준다.
+ ,indexes = {@Index(columList = "name"), uniqueConstraints={@UniqueConstraint(columNames={"email"})}}
-> index를 생성하고 보여줄수있다.
@ID , @GeneratedValue -> PK를 지정한다.
1) TABLE -> DB와 관계없이 ID를 만드는 것을 만들고 관리한다.
2) SEQUENCE -> mysql sequnece를 사용하여 값을 지정한다.
3) IDENTITIY -> DB에 ID값을 증가시키고 ID값을 사전에 받아온다.
4) AUTO -> 지정하지 않으면 AUTO라는 값을 만들어서 보내준다.
@Colum -> DB필드와 맞추기위한 속성이다.
1) name -> 이름을 나타내준다.
2) nullable -> null을 허용하는지 아닌지
3) unique -> 유일한지!?
length,sacle,precision ....
@Transient -> DB에 반영되지 않고 처리된다.
public enum 명{
}
을 통해 enum을 만들어 주고,
@Enumerated 어너테이션을 통해서 ORDINAL, STRING을 판별하여 사용하면 된다.
Enitity Listener
event가 생기면 처리하는 일들
@PrePersist -> insert method가 실행되기전
@PreUpdate -> merge method가 호출되기전
@PreRemove -> delete 전에
@PostPersist -> insert method 후에 실행
@PostUpdate -> merge 후에
@PostRemove -> delete후에
@PostLoad -> selete후에
감시한다 ->
Auditable implement로 만들어서 createdAt과 updatedAt을 분리시키고,
@prePersist
public void prePersist(Object o){
if(o instanceif Auditable){
((Auditable)o).setUpdatedAt(LocalDateTime.now());
}
}
이렇게 해서 영속성의 시기에 따라서 직접 넣어주는 코드를 생성해주면 좋다.