본문 바로가기

Spring Study/JPA 기본9

[JPA] 객체지향 쿼리 언어(JPQL) JPQL(Java Persistence Query Language)란? JPQL은 엔티티 객체를 대상으로 조회하는 쿼리이다. JPQL 특징 · 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리이다. · SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. · 즉, JPQL은 객체지향 SQL이다. JPQL과 SQL //검색 String jpql = "select m From Member m where m.name like m.age > 18'"; List result = em.createQuery(jpql, Member.class) .getResultList(); select m.id as id, m.age as age, m.USERNMAE as USERNAME, m.TEAM_ID as T.. 2023. 11. 7.
[JPA] 값 타입 JPA의 데이터 타입 분류 엔티티 타입 · @Entity로 정의하는 객체 · 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 · int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 · 식별자가 없고 값만 있기 때문에 변경 시 추적 불가 값 타입 분류 · 기본 값 타입 - 생명주기를 엔티티에 의존 (회원을 삭제하면 이름, 나이 필드도 함께 삭제) - 값 타입은 공유 X (회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안됨) · 임베디드 타입(embedded type, 복합 값 타입) - 새로운 값 타입을 직접 정의할 수 있음 - 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함 - @Embeddable: 값 타입을 정의하는 곳에 표시 - @Em.. 2023. 11. 6.
[JPA] 프록시와 연관관계 관리 프록시(Proxy)란? · '대리', '대신'이라는 뜻을 가지며, 프로토콜에 있어 대리 응답 등에서 사용하는 개념이다. · 클라이언트와 서버 사이에 존재하며, 중계기로서 대리로 통신을 수행하는 것을 프록시라 하며, 그 중계 기능을 하는 주체를 '프록시 서버'라고 한다. 프록시 특징 · em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 · 실제 클래스를 상속 받아서 만들어 진다. · 실제 클래스와 겉 모양이 같다. · 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. (이론상) · 프록시 객체는 실제 객체의 참조(target)를 보관 · 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체의 초기화 Member .. 2023. 11. 1.
[JPA] 고급 매핑 상속관계 매핑 · 관계형 데이터베이스는 상속 관계 X · 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사 · 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입, 서브타입 관계를 매핑 · 슈퍼타입, 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 - 각각 테이블로 변환 → 조인 전략 - 통합 테이블로 변환 → 단일 테이블 전략 - 서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 주요 어노테이션 · @Inheritance(strategy = InheritanceType.XXX) - JOINED: 조인전략 - SINGLE_TABLE: 단일 테이블 전략 - TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 · @DiscriminatorColumn(name = "DTYPE").. 2023. 10. 31.
[JPA] 다양한 연관관계 매핑 연관관계 매핑시 고려사항 1. 다중성 · 다대일: @ManyToOne · 일대다: @OneToMany · 일대일: @OneToOne · 다대다: @ManyToMany 2. 단방향, 양방향 테이블 · 외래 키 하나로 양쪽 조인 가능 · 방향이라는 개념 X 객체 · 참조용 필드가 있는 쪽으로만 참조 가능 · 한쪽만 참조하면 단방향 · 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 · 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 · 객체 양방햔 관계는 A→B, B→A 처럼 참조가 2개 · 연관관계의 주인: 외래 키를 관리하는 참조 · 주인의 반대편: 외래 키에 영향을 주지 않고 단순 조회만 가능 다대일 단방향 · 가장 많이 사용하는 연관관계 · 다대일의 반대는 일대다 다대일 양방향 · 외래 키가 .. 2023. 10. 30.
[JPA] 연관관계 매핑 연관관계 용어 · 방향(Direction): 단방향, 양방향 · 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) · 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인 필요 연관관계가 필요한 이유 · 객체를 테이블에 맞추어 데이터 중심 모델링을 하면, 협력 관계를 만들 수 없다. · 테이블은 외래 키로 조인을 사용해 연관된 테이블을 찾는다. · 객체는 참조를 사용해 연관된 객체를 찾는다. · 테이블과 객체 사이에는 큰 간격이 있다. 단방향 연관관계 · 객체 지향 모델링 (객체의 참조와 테이블의 외래 키를 매핑) @Entity public class Member{ @Id @GeneratedValue private Long id; @Colu.. 2023. 10. 18.
[JPA] 엔티티 매핑 (Entity Mapping) 엔티티 매핑 종류 · 객체와 테이블 매핑: @Entity, @Table · 필드와 컬럼 매핑: @Column · 기본 키 매핑: @Id · 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity · @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. · JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 · 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) · final 클래스, enum, interface, inner 클래스 사용 X · 저장할 필드에 final 사용 X 속성 · name - JPA에서 사용할 엔티티 이름 지정 - 기본값: 클래스 이름을 그대로 사용 - 같은 클래스 이름이 없으면 가급적 기본값 사용 .. 2023. 10. 17.
[JPA] 영속성 관리 JPA에서 가장 중요한 2가지 · 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) · 영속성 컨텍스트 영속성 컨텍스트 · JPA를 이해하는데 가장 중요한 용어 · "엔티티를 영구 저장하는 환경" 이라는 뜻 · EntityManager.persist(entity); J2SE 환경 J2EE, 스프링 프레임워크 같은 컨테이너 환경 엔티티 매니저와 영속성 컨텍스트가 N : 1 엔티티의 생명주기 · 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 · 영속(managed): 영속성 컨텍스트에 관리되는 상태 · 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 · 삭제(removed): 삭제된 상태 영속 / 비영속 / 준영속 .. 2023. 10. 17.
[JPA] JPA 기본 개념 JPA(Java Persistence API)란? Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함 JPA 구동 방식 JPA - CRUD - C(Create): jpa.persist(member) - R(Read): Member member = jpa.find(memberId) - U(Update): member.setName(". . .") - D(Delete): jpa.remove(member) 객체와 테이블 생성, 매핑 import javax.persistence.Entity; imp.. 2023. 10. 14.