영속성 컨텍스트는 하이버네이트와 같은 객체-관계 매핑 프레임워크가 실시간 어플리케이션에서 엔티티의 생명주기를 관리하기 위해 만들어진 개념이다. 하이버네이트란, 자바 언어를 위한 ORM 프레임워크이다. 즉, 객체 지향 도메인 모델을 관계형 데이터베이스로 매핑시켜준다. 하
기본 값 타입은 말 그대로, 기본으로 제공되는 값 타입을 의미한다. 예시로는 다음과 같은 타입들이 있다.자바기본타입 (int, double, ...)래퍼 클래스 (Integer, Long, ...)String기본 값 타입의 특징으로는 생명 주기를 엔티티에 의존한다는 것
JPA를 이용해 처음 개발하다 보면, 엔티티와 연관된 엔티티가 많아지게 되고 이것이 성능 저하를 야기할 수 있지 않을까라는 고민에 빠지게 된다. 나 또한 그랬었다.하지만, JPA에서는 엔티티를 조회할 때 연관된 엔티티를 모두 조회하는 것이 아니다. 프록시 객체를 활용해
특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이(transitive persistence)를 사용하면 된다. JPA는 CASCADE 옵션으로 영속성 전이를 제공한다. 쉽게 말해, 영속성 전이를 사용하면, 부모 엔티티를
JPA 변경 감지 기능만으로 엔티티의 필드를 수정하면 너무 많은 SQL 문들이 실행된다. 만약 필드값이 변경된 로우가 100개라면, 100번의 UPDATE SQL문이 실행된다. 결과를 보면 알 수 있듯이, Member 테이블에서 3개의 로우가 조회되었고, 3개의 로우의
스프링 데이터 JPA를 사용하면, JpaRepository 인터페이스를 상속받아서 새로운 인터페이스를 만들어 쿼리 메서드를 상황에 맞춰 만드는 것만으로도 기능이 잘 동작한다. 위의 코드는 JpaRepository 인터페이스를 상속받아 만든 리포지토리를 MemberRep
OSIV의 핵심은 뷰에서도 지연 로딩이 가능하도록 하는 것이다. 가장 단순한 구현 방법은 클라이언트의 요청이 들어오자마자 서블릿 필터나 인터셉터에서 트랜잭션을 시작하고 요청이 끝날 때 트랜잭션도 끝내는 것이다. 이것을 요청당 트랜잭션 방식의 OSIV이라고 한다.많은 사
JPA의 양방향 연관관계에 대해 알아보고 주의점, 허점들에 대해 알아보자.
이전에 페치조인에 대한 글을 작성했었습니다. 해당 글에서는 일대다 컬렉션에 대한 페치 조인은 페이징이 불가능하다고 했었습니다.. 물론 불가능한 건 아니지만, 데이터의 정합성에 문제가 생길 수 있다는 것입니다. 상황을 예시로 들어보겠습니다. > #### 데이터의 정합성