본문 바로가기

STUDY/JPA

(9)
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 객체지향쿼리언어2 - 중급문법 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) JPQL - 경로 표현식 점을 찍어 객체 그래프를 탐색하는 것 m.username : 상태 필드 m.team : 단일 값 연관 필드 m.orders : 컬렉션 값 연관 필드 상태 필드 (state field) 단순히 값을 저장하기 위한 필드 경로 탐색의 끝, 탐색 X 연관 필드 (association field) 단일 값 연관 필드 @ManyToOne, @OneToOne, 대상이 엔티티 묵시적 내부 조인 (INNER JOIN) 발생, 탐색 O 실무에서는 묵시적 내부 조인이 발생하도록 쿼리를 짜면 안됨 !! 컬렉션 값 연관 필드 @OneToMany, @ManyToMany, 대상이 컬렉션 묵시적 내부 조인 (INNER JOIN) 발생, 탐색 X FR..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 객체지향쿼리언어1 - 기본문법 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 객체지향 쿼리 언어 소개 jpa는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL Native SQL JDBC API 직접 사용, Mybatis, SpringJdbcTemplate 함께 사용 JPQL 소개 JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 WHERE, GROUP BY 등 JPA는 SQL을 추상화환 JPQL이라는 객체 지향 쿼리 언어를 제공 SELECT, FROM, WHERE, GROUP B..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 값 타입 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 기본값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 e.g) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 (변경이 불가하기 때문에 Side effect 없이 사용 가능) 자바 기본 타입(int, double 등) 자바 기본 타입은 절대 공유되지 않고 항상 값을 복사함 래퍼 클래스(Integer, Long) 클래스는 reference를 끌고 가기 때문에 공유 가능한 객체이지만 변경은 안됨 String Str..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 프록시와 연관관계 관리 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 프록시 em.find() vs em.getReference() em.find() : 데이터베이스를 통해 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회가 아닌 가짜(프록시) 엔티티 객체 조회 Member member = new Member(); member.setName("test1"); em.persist(member); em.flush(); em.clear(); // findMember = Proxy 클래스 Member findMember = em.getReference(Member.class, member.getId()); // member.getId()는 이미 알고 있는 값이므로 DB 조회하지 않음 System..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 고급 매핑 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 상속관계 매핑 관계형 데이터베이스는 상속 관계가 없음 객체의 상속 구조를 DB의 슈퍼타입 서브타입 관계로 매핑 상속관계 매핑 방법 슈퍼타입-서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 주요 어노테이션 @Inheritance(strategy = InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 @DiscriminatorColumn(name = "DTYPE") DiscriminatorVal..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 다양한 연관관계 매핑 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 연관관계 매핑 시 고려사항 3가지 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany (실무에선 사용하지 말기) 단방향, 양방향 테이블 외래키 하나로 양쪽 조인 가능 방향의 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 (단방향 2개) 연관관계의 주인 (양방향) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2개 둘 중 테이블의 외래키를 관리할 곳을 정해야 함 연관관계의 주인 = 외래키를 관리하는 참조 주인이 아닌 쪽은 단순 조회만 가능 1. 다대일 [N:1] 다대일 단방향 가장 많이 사용하는 연관관계 다대일..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 연관관계 매핑 기초 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 1. 단방향 연관관계 객체의 참조와 테이블의 외래키를 매핑 Member(1)와 Team(M)은 일대다 관계 테이블 연관관계 테이블은 외래키로 조인을 사용해 연관된 테이블을 탐색 객체 연관관계 객체는 참조를 사용해서 연관된 객체를 탐색 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; // 연관 관계 설정 @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } Team team = new Team(); team..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 엔티티 매핑 인프런 - 자바 ORM 표준 JPA 프로그래밍 (김영한님) 엔티티 매핑 1. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리 JPA를 사용해 테이블과 매핑할 클래스에 @Entity 어노테이션 추가 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Table @Table은 엔티티와 매필항 테이블 지정 2. 데이터베이스 스키마 자동 생성 운영에선 사용하지 말고, 개발에서만 사용할 것!! DDL을 애플리케이션 실행 시점에 자동 생성 데이터베이스 방언을 활용해 데이터베이스에 맞는 적절한 DDL이 생성됨 속성 hibernate.hbm2ddl.auto 옵션 설명 create 기존 테이블 삭제 후 다시 생성..