Spring/JPA

태태개발일지(JPA)

태태코 2023. 8. 10. 10:49
반응형

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());

}

}

이렇게 해서 영속성의 시기에 따라서 직접 넣어주는 코드를 생성해주면 좋다.

 

 

 

 

반응형