JPA
-
[JPA] 페치조인(fetch join)이란?JPA 2020. 4. 3. 04:09
페치조인(fetch join) 기존 SQL의 조인이 아님 JPQL의 성능 튜닝을 위해 제공되는 조인 연관된 엔티티 or 컬렉션을 SQL 한번에 함께 조회하는 기능 간단한 예제를 보자. @Entity @Getter public class Member { @Id @GeneratedValue private Long id; private String username; private int age; // 양방향 연관 필드 // 연관관계 주인 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; } @Entity @Getter public class Team { @Id @GeneratedValue private Long..
-
[JPA] 경로표현식(묵시적 내부조인과 명시적 내부조인)JPA 2020. 4. 3. 02:38
경로표현식 ' . ' 을 찍어서 객체 그래프를 탐색 하는것 상태필드 단순히 값을 저장하기 위한 필드(ex. username) 경로 탐색의 끝. 더 이상의 탐색할 것이 없음 String query = "select m.username from Member12 m"; List resultList = em.createQuery(query, String.class).getResultList(); JPQL을 통해 데이터베이스로 날라간 실제 SQL을 보면 상태필드 조회는 기존의 JPQL과 같음을 확인할 수 있다. 연관필드 단일값 연관필드 : @ManyToOne, @OneToOne 대상이 엔티티일 경우 묵시적 내부조인 발생 추가 탐색 가능(ex. m.team.name) 컬렉션 값 연관필드 : @OneToMany, @..
-
[JPA] JPA 쿼리 지원 방식(JPQL)JPA 2020. 3. 30. 02:43
JPA 쿼리 지원 방식 JPA는 데이터베이스에 데이터를 주고받기 위한 다양한 쿼리 방식을 지원한다. JPQL 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 테이블이 아닌 매핑된 엔티티를 대상으로 검색(SQL은 테이블을 대상으로 검색) JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공 ANSI 표준 SQL을 지원하는 문법 모두 적용이 가능 SQL을 추상화해서 특정 데이터베이스에 의존하지 않는다. 단순 String 값으로 쿼리가 쓰이기 때문에 동적 쿼리를 만들기 어렵다. Criteria 쿼리를 String 문자가 아닌 자바 코드로 작성하기 때문에 컴파일 오류를 찾기 쉬움 동적 쿼리를 짜기 수월하지만 코드의 가독성이 매우 떨어져..
-
[JPA] 데이터 타입 분류 (Embedded)JPA 2020. 3. 29. 00:24
JPA 데이터 타입 분류 1. 엔티티 타입 @Entity로 정의하는 클래스 객체를 의미 엔티티 타입은 데이터(속성) 값이 변해도 식별자(@Id)를 통해 추적이 가능함 2. 값 타입 자바 기본 타입 또는 객체(int, Integer, String..) 값 타입은 식별자가 존재하지 않기 때문에 추적이 불가능 값 타입 분류 기본값 타입 자바 기본 타입(primitive type) 래퍼 클래스(wrapper) String 특징 생명주기를 엔티티에 의존함(엔티티가 삭제되면 필드도 함께 삭제) 값 타입은 공유되서는 안됨(특정 엔티티 속성의 일부가 변경되는 것이 다른 엔티티에 영향을 미치면 안 됨) 자바의 기본 타입(primitive type)은 항상 값을 복사하는 개념이기 때문에 공유되는 특성이 없다. 임베디드 타..
-
[JPA] 상속관계 매핑 전략();JPA 2020. 3. 27. 16:38
JPA는 테이터베이스와 객체를 매핑해주는 자바 진영의 ORM 기술 표준이다. 그럼 객체지향언어의 특징 중 하나인 '상속'의 개념이 포함된 객체는 데이터베이스에서 어떠한 방식으로 매핑되는 것일까? Item 객체를 부모클래스로 지정하고 Album, Movie, Book 객체는 부모클래스를 자원을 상속받은 자식클래스로서 역할을 수행하고있다. 데이터베이스는 상속을 어떤식으로 표현할까? 결론부터 말하자면 객체의 상속관계와 정확하게 일치하는 데이터베이스 모델링은 존재하지 않는다고 한다. 차선책으로 상속관계와 비교적 유사한 슈퍼타입-서브타입 모델링 기법으로 데이터베이스를 상속 객체에 매핑해야 한다. 슈퍼타입-서브타입 논리모델을 실제 데이터베이스 물리모델로 구현하는 것은 3가지 전략이 있다. 조인 전략 1. 모델링 공..
-
[JPA] JPA 특징 정리JPA 2020. 3. 24. 04:47
JPA(Java Persistence API)란? 자바 진영의 ORM 기술 표준. JPA는 인터페이스이며 이것의 구현체는 Hibernate, EclipseLink, DataNucleus가 존재한다. ORM(Object-relational mapping)이란? 객체와 관계형 데이터베이스를 중간에서 매핑해주는 기술. 객체를 Collection에 저장하고 조회하는 것처럼 DB 테이블에서도 저장하고 조회할 수 있다. EBJ - 엔티티 빈이라는 기술이 ORM의 시초지만 성능과 사용방법이 너무 뒤떨어져 사용도가 낮았고 ORM 기술을 이용한 hibernate가 오픈소스로 등장하게 된다. 많은 인기를 얻은 hibernate는 자바 진영에서 JPA로 재정의 되어 표준 스펙으로 현재까지 널리 사용되고 있다. JPA를 사용..