인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편10 11] 객체지향 쿼리 언어 - 중급 문법 경로 표현식.(점)을 찍어 객체 그래프를 탐색하는 것 select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드where t.name = '팀A' 엔티티에서 바로 탐색가능한것 == 상태필드상태필드로 객체 그래프를 탐색했다.라고 볼수있다. 3가지 경로표현식이 존재 경로 표현식 용어 정리 상태 필드(state field): 단순히 값을 저장하기 위한 필드 (ex: m.username) 연관 필드(association field): 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드: @OneToM.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 6. 4. 10) 객체지향 쿼리 언어(JPQL) JPA는 다양한 쿼리 방법을 지원 • JPQL • JPA Criteria • QueryDSL • 네이티브 SQL • JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL 소개 가장 단순한 조회 방법• EntityManager.find()• 객체 그래프 탐색(a.getB().getC()) • JPA를 사용하면 엔티티 객체를 중심으로 개발 • 문제는 검색 쿼리 • 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 • 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공 • SQL과 .. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 6. 4. 9) [ 미완 ]값 타입 [임베디드 타입,값 타입과 불변 객체 JPA의 데이터 타입 분류 엔티티 타입 • @Entity로 정의하는 객체 • 데이터가 변해도 식별자로 지속해서 추적 가능 • 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 • 식별자가 없고 값만 있으므로 변경시 추적 불가 • 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 • 자바 기본 타입(int, double)• 래퍼 클래스(Integer, Long)• String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 기본값 타입 • 예): String name.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 31. 8) 프록시,즉시 로딩, 지연 로딩,영속성 전이, 고아객체 Member를 조회할 때 Team도 함께 조회해야 할까? 어떤 경우에는 회원과 팀을 함께 출력해야하므로 둘다 조회해야하고어떤 경우에는 회원만 출력하므로 둘다 조회할 필요가 없다. 회원만 출력하는데 둘다 조회해오면 낭비가 되니까 그걸 해결하기위해 jpa는 프록시를 이용한다. [ 지연로딩 , 즉시로딩] 프록시 em.find() vs em.getReference() em.find() 데이터베이스를 통해서 실제 엔티티 객체 조회em.getReference()데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 [db에 쿼리가 실행되지않는데 객체가 조회된다. ] em.find로 테스트Member member = new Member();member.setName("hello");em.persist(me.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 31. 7) 고급 매핑 [ 상속관계 매핑 -조인,단일,각각] , MappedSuperclass 상속관계 매핑 • 관계형 데이터베이스는 상속 관계가 없다. • 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. • 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 • 각각 테이블로 변환 -> 조인 전략 • 통합 테이블로 변환 -> 단일 테이블 전략 • 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략DTYPE을 이용하여 앨범인지 영화인지 책인지 구분하겠다는것 장점• 테이블 정규화• 외래 키 참조 무결성 제약조건 활용가능• 저장공간 효율화 단점• 조회시 조인을 많이 사용, 성능 저하• 조회 쿼리가 복잡함• 데이터 저장시 INSERT SQL 2번 호출 단일 테이.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 29. 6) 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지• 다중성• 단방향, 양방향• 연관관계의 주인 다중성[데이터베이스의 다중성을 기준으로 고민해서 선택하면 된다.]• 다대일: @ManyToOne• 일대다: @OneToMany• 일대일: @OneToOne• 다대다: @ManyToMany 단방향, 양방향 테이블 • 외래 키 하나로 양쪽 조인 가능 • 사실 방향이라는 개념이 없음 객체 • 참조용 필드가 있는 쪽으로만 참조 가능 • 한쪽만 참조하면 단방향 • 양쪽이 서로 참조하면 양방향 연관관계의 주인 • 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 • 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 • 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 • 연관관.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 28. 5)실전 예제, 단방향 연관관계 매핑, 양방향 연관관계,연관관계의 주인 실전 예제 - 1. 요구사항 분석과 기본 매핑 요구사항 분석• 회원은 상품을 주문할 수 있다. • 주문 시 여러 종류의 상품을 선택할 수 있다. 도메인 모델 분석 회원과 주문의 관계: 회원은 여러 번 주문할 수 있다. (일대다) 주문과 상품의 관계: 주문할 때 여러 상품을 선택할 수 있다.반대로 같은 상품도 여러 번 주문될 수 있다. 주문상품 이라는 모델을 만들어서 다대다 관계를 일다대, 다대일 관계로 풀어냄 테이블 설계 엔티티 설계와 매핑생성된 클래스@Getter@Setter@Entitypublic class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") // 테이블상 컬럼명이 ITEM_ID 이므로 매핑해준다. private L.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 22. 4) 엔티티 매핑,데이터베이스 스키마 자동생성 엔티티 매핑• 객체와 테이블 매핑: @Entity, @Table• 필드와 컬럼 매핑: @Column• 기본 키 매핑: @Id• 연관관계 매핑: @ManyToOne , @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.• JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의• 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) • final 클래스, enum, interface, inner 클래스 사용X • 저장할 필드에 final 사용 X @Entity 속성 정리 속성: name • JPA에서 사용할 엔티티 이름을 지정한다. • 기본값: 클래스 이름을 그대로 사용(예: Member) • 같은 클래스 이.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 22. 3) jpa 구조, 영속성 컨텍스트,영속,준영속,쓰기지연 jpa구조 JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping)2. 영속성 컨텍스트 고객의 요청이 올때마다 EntityManager를 생성한다.EntityManager는 내부적으로 data connection을 사용해서 db를 사용하게 된다. 영속성 컨텍스트 • JPA를 이해하는데 가장 중요한 용어• “엔티티를 영구 저장하는 환경”이라는 뜻[컨텍스트는 문맥, 환경 이런뜻을 가진다.]• EntityManager.persist(entity);[db에 저장한다기보다는 영속성 컨텍스트라는곳에 저장한다는것이다.] 엔티티 매니저? 영속성 컨텍스트? • 영속성 컨텍스트는 논리적인 개념• 눈에 보이지 않는다.• 엔티티 매니저를 통해서 영.. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 20. 2) 프로젝트설정,jpa 기초 maven pom.xml 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 persistence.xml persistence가 persistence.xml을 읽어서 entitymanagerFactory라는 클래스를 생성한다.그다음 필요할때마다 .. 인프런/자바 ORM 표준 JPA 프로그래밍 - 기본편 2024. 5. 20. 이전 1 다음