JPA - Persistence( Transaction )

yg kim·2022년 1월 15일
0

Spring

목록 보기
4/7

Persistence

  • 영속성 (지속 접근 가능) = DB <> 메모리
  • JPA (EntityManager)

application.yml

  • spring.jpa.generate-ddl : true
                                    false
  • spring.jpa.hibernate.ddl-auto : create : 생성
                                           create-drop : 생성 후 삭제
                                           none
                                           update : db 업데이트
  • jpa.hibernate.ddl-auto 이 설정되어 있으면 jpa.generate-ddl 무시.

@Transactional

  • @Transactional 사용시 각각의 메소드에서 영속성을 지님.

  • 영속성 cache가 db에 반영되는 시점
    - .flush() 사용시
    - .save() 사용시 클래스에 @Transactional사용하지 않으면 save에 각각의 @Transactional을 사용하고 있기때문에 바로바로
    - Transaction 종료시 (auto commit == auto flush)
    - @Transactional을 사용하면서 데이터 변경 후 모든 save후에 마지막에 findAll()을 수행할 경우 auto flush가 되어 db에 적용후에 데이터를 다시 가져옴

  • isolation

    • READ_UNCOMMITTED ==> 중간에 데이터가 들어오면 그것도 바뀌기 때문에 사용 x. (데이터 정합성이 발생하기 때문에 사용 하지 않음)
    • READ_COMMITTED
    • REPEATABLE_READ --> 한 트랜잭션에서 다른데서 commit을 해도 트랜잭션 초기 값만 보여줌.
    • SERIALIZABLE --> 최고 등급 isolation 커밋이 일어나지 않은 트랜잭션 존재시 lock을 걸고 웨이팅이 생김. (웨이팅이 생기므로 성능상 잘 사용하지 않음)
  • propagation -> 하나의 메소드와 다른 메소드가 각각의 트랜잭션을 갖고 있기 때문에 그것을 잇기 위해 사용

    • REQUIRED --> 기존 사용되던 트랜잭션 사용 없을때만 새로운 트랜잭션( @Transactional 을 사용하지 않은 메소드에서 save 를 할 경우에는 save 하나 하나가 transaction이 되는것)
    • REQUIRES_NEW --> 각 트랜잭션이 독립적으로 진행됨. save 처럼
    • NESTED --> 하나의 트랜잭션이지만 분리되어 실행 시킬 수 있음 ex) a 트랜잭션 안에 b트랜잭션을 nested로 놓을 경우 b 가 에러가 나면 a는 정상적으로 커밋됨. 하지만 a가 에러가 나면 a,b 모두 커밋되지 않음.
    • SUPPORT --> Required랑 비슷하지만 없을때는 새롭게 트랜잭션을 생성하지는 않음
    • NOT_SUPPORTED --> 해당 영역은 트랜잭션 없이 실행 되도록 설정.
    • MANDATORY --> 필수 적으로 트랜잭션이 존재해야함. 없으면 오류
    • NEVER --> 트랜잭션이 없어야함. 있으면 오류
    • REQUIRED 을 제외한 것은 지양하여 사용함.

Persistence Entity LifeCycle

  • Entity Manager 객체
    • Entity와 DB를 어떻게 연결해 주는지
    • entityManger.persist(객체명)
    •                  .detach
    •                  .merge
    •                  .flush
    •                  .clear
    •                  .remove
profile
발전하고 싶은 사람

0개의 댓글