OSIV이란?JPA의 OSIV(Open Session In View) 는 웹 요청이 시작될 때 영속성 컨텍스트(EntityManager)를 생성하고, 응답이 끝날 때까지 유지하는 패턴이다. OSIV 설정 방법 아래는 Spring Boot 환경에서 yaml 파일에 대한 설정 방법이고, Spring Boot에서는 기본적으로 OSIV가 활성화되어 있다.spring: jpa: open-in-view: trueOSIV가 필요한 이유 JPA의 연관관계가 LAZY 로딩일 때 문제가 발생할 수 있다.// 엔티티@Entitypublic class Order { @ManyToOne(fetch = FetchType.LAZY) private Member member;}// 서비스@Transactionalpu..
일대다(1:N) 연관관계란? 일대다(1:N) 연관관계는 하나의 엔티티가 여러 개의 엔티티와 관계를 맺는 구조를 의미한다. 예를 들어 객체 구조에서 Team과 Member가 있을 때, 하나의 Team에는 여러 명의 Member가 속할 수 있고 각 Member는 하나의 Team에만 속하게 된다. 이러한 관계를 데이터베이스 테이블로 설계할 경우, 외래키는 항상 ‘다(N)’에 해당하는 쪽에 위치하게 되므로 Member 테이블에 Team의 기본키를 참조하는 외래키가 포함된다. 이때 일대다 연관관계에서 일 쪽에 외래키를 관리하며 연관관계의 주인이 된다. 예제 아래의 코드는 일대다 관계에서 일 쪽에 단방향 연관관계의 주인이 될 때 주의할 점이다.@Entitypublic class Member { @Id @..
JPA 페이징 처리 JPA는 페이징 처리를 위한 메서드를 제공한다. 이 메서드를 통해 페이지를 위한 쿼리를 자동으로 만들어준다. 아래 예제는 JPQL으로 구현하였다. 페이징 쿼리 메서드setFirstResult(int startPosition): 조회 시작 위치(0부터 시작)setMaxResults(int maxResult): 조회할 데이터 수예제@Entitypublic class PagingMember { @Id @GeneratedValue private Long id; private int age; // getter, setter 생략} // 엔티티 매니저 생략System.out.println("회원 저장");for(int i=1; i result1 = em.createQ..
@Enumerated이란? Java의 ENUM 타입을 DB로 저장할 수 있다. 저장 방법은 두 가지가 있는데, 첫 번째는 ENUM 값의 위치로 저장하는 방법. 두 번째는 ENUM 값을 문자열로 DB에 저장하는 방법이 있다. @Enumerated 사용 시 주의할 점 @Enumerated 사용 시 주의할 점이 있는데 @Enumerated은 기본 값이 EnumType.ORDINAL(ENUM 값의 위치로 저장)이다. 만약 기본 값으로 저장할 때 어떤 문제가 발생하는지 아래 예제를 통해 알아보았다. 문제점 예제@Entitypublic class Member { @Id @GeneratedValue private Long id; @Column(name = "user_name") privat..