[Basic-9] 객체지향 쿼리 언어(JPQL)
·
Spring/JPA
1. 객체지향 쿼리 언어 소개1.1. JPA의 다양한 쿼리 방법JPA는 여러 가지 쿼리 방법을 제공하여 다양한 상황에 대응할 수 있도록 설계되었다:// 1. JPQL (Java Persistence Query Language)String jpql = "SELECT m FROM Member m WHERE m.age > 20";List result = em.createQuery(jpql, Member.class).getResultList();// 2. Criteria API (타입 안전 쿼리)CriteriaBuilder cb = em.getCriteriaBuilder();CriteriaQuery cq = cb.createQuery(Member.class);Root m = cq.from(Member.class..
[Basic-8] 값 타입
·
Spring/JPA
1. 기본값 타입1.1. JPA 데이터 타입 분류JPA의 데이터 타입은 크게 엔티티 타입과 값 타입으로 구분된다. 구분 엔티티 타입 값 타입 정의@Entity로 정의하는 객체단순 값으로 사용하는 타입식별자식별자 존재식별자 없음생명주기독립적 관리엔티티에 의존적변경 추적가능불가능공유가능불가능 (복사 사용)예시Member, OrderString name, int age1.2. 값 타입 분류값 타입은 세 가지로 세분화된다:기본값 타입자바 기본 타입: int, double, boolean래퍼 클래스: Integer, Long, DoubleString임베디드 타입 (복합 값 타입)사용자 정의 값 타입@Embeddable로 정의컬렉션 값 타입값 타입을 컬렉션으로 사용@ElementCollection으로 정의1.3..
[Basic-7] 프록시와 연관관계 관리
·
Spring/JPA
1. 프록시1.1. 프록시의 필요성문제 상황: Member를 조회할 때 항상 Team도 함께 조회해야 할까?// 케이스 1: 회원과 팀 정보를 함께 사용하는 경우public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); // Team 정보 필요}// 케이스 2: 회원 정보만 사용하는 경우public void printUser(String m..
[Basic-6] 고급 관계 매핑
·
Spring/JPA
1. 상속 관계 매핑1.1. 관계형 데이터베이스와 객체의 상속 차이관계형 데이터베이스는 상속이라는 개념이 존재하지 않는다. 대신 데이터베이스 설계에서 슈퍼타입-서브타입 모델링이라는 기법이 객체의 상속과 유사한 역할을 한다.객체의 상속// 객체의 상속 구조class Item { private Long id; private String name; private int price;}class Album extends Item { private String artist; private String etc;}class Book extends Item { private String author; private String isbn;}class Movie extends Item ..
[Basic-5] 연관관계 매핑 심화
·
Spring/JPA
1. 연관관계 매핑시 고려사항 3가지1.1. 다중성 (Multiplicity)객체 간의 관계를 수적으로 표현하는 개념이다. JPA는 4가지 다중성을 지원한다:다대일 (N:1) - @ManyToOne일대다 (1:N) - @OneToMany일대일 (1:1) - @OneToOne다대다 (N:M) - @ManyToMany (실무에서는 사용 제한적)1.2. 단방향 vs 양방향테이블의 관점외래 키 하나로 양쪽 테이블 조인 가능사실 방향이라는 개념이 존재하지 않음JOIN 쿼리로 어느 방향으로든 조회 가능-- 양방향으로 모두 조회 가능SELECT * FROM MEMBER M JOIN TEAM T ON M.TEAM_ID = T.ID;SELECT * FROM TEAM T JOIN MEMBER M ON T.ID = M.TE..
[Basic-4] 연관관계 매핑 기초
·
Spring/JPA
1. 연관관계가 필요한 이유1.1. 객체지향 설계의 목표객체지향의 선구자 조영호는 그의 저서 '객체지향의 사실과 오해'에서 이렇게 말했다:"객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다."이 말은 객체들이 서로 협력하면서 문제를 해결할 수 있어야 함을 의미한다. 그러나 테이블 중심의 설계에서는 이 협력 관계를 구현하기 어렵다.1.2. 예제 시나리오간단한 비즈니스 도메인을 생각해보자:회원과 팀이 존재회원은 하나의 팀에만 소속 가능회원과 팀은 다대일(N:1) 관계1.3. 객체를 테이블에 맞추어 모델링 (문제점)테이블 구조에 맞춘 객체 설계 (연관관계가 없는 객체)@Entitypublic class Member { @Id @GeneratedValue private Lon..
[Basic-3] 엔터티 매핑 (Entity Mapping)
·
Spring/JPA
1. 객체와 테이블 매핑 기초1.1. @Entity 애노테이션@Entity가 붙은 클래스는 JPA가 관리하는 엔티티가 된다. JPA를 사용해서 테이블과 매핑할 모든 클래스는 @Entity 애노테이션이 필수다.@Entitypublic class Member { @Id private Long id; private String name; // 기본 생성자 필수 public Member() {} // 매개변수 있는 생성자 public Member(Long id, String name) { this.id = id; this.name = name; }}@Entity 사용 시 주의사항기본 생성자 필수 (파라미터가 없는 public 또는 protect..
[Basic-2] 영속성 컨텍스트 (Persistence Context)
·
Spring/JPA
1. JPA의 핵심 개념1.1. JPA의 두 가지 핵심 기능JPA에는 객체와 테이블을 매핑하는 기술로, @Entity, @Id, @Column 등의 애노테이션으로 매핑을 정의하는 1)객체와 관계형 데이터베이스 매핑(ORM)과 엔터티를 관리하는 논리적인 저장 공간으로, JPA의 성능 최적화 기능인 2)영속성 컨텍스트(Persistence Context)로 핵심 기능이 존재한다. 이번 포스팅에서는 영속성 컨텍스트에 알아본다.1.2. 엔터티 매니저 팩토리와 엔터티 매니저1.3. 엔터티 매니저와 영속성 컨텍스트영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다. 개발자는 엔터티 매니저(EntityManager)를 통해 이 컨텍스트에 접근한다.// 엔터티 매니저를 통해 영속성 컨텍스트에 접근EntityMana..