QueryDSL 문서

J/JPA 2017. 6. 12. 16:41

상수 값 넣기

NumberTemplate.ZERO.castToNum(BigDecimal.class)


'J > JPA' 카테고리의 다른 글

영속성 관리  (0) 2015.11.22

설정

트랙백

댓글

영속성 관리

J/JPA 2015. 11. 22. 20:22

JPA

EntityManagerFactory : 엔티티 매니저를 만드는 공장 ( 여러 스레드가 동시에 접근해도 안전하다. )

EntityManager : 엔티티를 저장하는 가상 데이터베이스 ( 여러 스레드가 동시에 접근하면 동시성 문제가 발생 )


엔티티의 생명주기

비영속(new/transient), 영속(managed), 준영속(detached), 삭제(removed)




영속성

- 식별자 값이 반드시 있어야한다.

- 1차 캐시와 같은 영속성 관리 테이블에서 영속성 데이터들을 관리한다.

- 트랜잭션을 지원하는 쓰기 지연을 제공한다.

- 변경 감지

- 엔티티의 동일성을 보장한다.

- 지연 로딩


동일성 : 실제 인스턴스가 같다.

동등성 : 실제 인스턴스는 다를 수 있지만 인스턴스가 가지고 있는 값이 같다.

쓰기 지연 : 영속성에 있는 데이터를 바로 데이터베이스에 저장하지 않고 쓰기 지연 저장소에 저장해둔 쿼리들을 모아서 flush하는 시점에 보낸다. 이때 쓰기 지연 저장소에 보관해서 모아서 보내는 과정을 쓰기 지연이라 한다.

변경 감지 : 초기에 스냅샷을 찍어 기존과 변경된 부분을 비교하여 변경된 부분을 찾는다.


영속성으로 전환하는 방법??



플러시

영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.

데이터베이스에 동기화하는 것


영속성 컨텍스트를 플러시하는 방법

직접 호출

트랜젝션 커밋 시 플러시 자동 호출

JPQL 쿼리 실행 시 플러시 자동 호출


준영속

준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다.


준영속 상태로 만드는 방법

em.detach(entity) 특정 엔티티만 준영속성 상태로 전환

em.clear() 영속성 컨텍스트 완전한 초기화

em.close() 영속성 컨텍스트 종료


병합(merge) : 준영속 상태의 엔티티를 다시 영속 상태로 변경하려면 병합을 사용.

식별자 값으로 엔티티를 조회할 수 있으면 불러스 병합하고 조회할 수 없으면 새로 생성해서 병합한다.


em.contains : 파라미터로 넘어온 엔티티를 관리하는지 확인하는 메소드.

ex) em.contains(entity) 


성능 개선

JPA 기본적략은 엔티티의 모든 필드를 업데이트한다.

이때, 필드가 많거나 저장되는 내용이 너무 크면 수정된 데이터만 사용해서 동적으로 UPDATE SQL을 생성하는 전략 ( @DynamicUpdate )



'J > JPA' 카테고리의 다른 글

QueryDSL 문서  (0) 2017.06.12

설정

트랙백

댓글