JPA/Spring Data JPA39 [Spring Data JPA] JPA 서브쿼리와 JPQL 타입표현식 기타식 ⚡ 01. 서브 쿼리(Sub Query)쿼리 안에 또 다른 쿼리를 작성하는 것01-1. 나이가 평균보다 많은 회원select m from Member mwhere m.age > (select avg(m2.age) from Member m2)01-2. 한 건이라도 주문한 회원select m from Member mwhere (select count(o) from Order o where m = o.member) > 001-3. 서브쿼리 지원 함수EXISTS가 IN에 비해 성능 면에서 뛰어나다. EXISTS : 메인 쿼리 -> 서브쿼리 연산 IN : 서브쿼리 -> 메인 쿼리 연산[NOT] EXISTS (subquery) : 서브쿼리에 결과가 존재하면 참(true){ALL | ANY | SOME} (subqu.. 2023. 4. 25. [Spring Data JPA] JPA 프로젝션과 페이징 그리고 조인 ⚡ 01. 프로젝션RDBMS의 SQL은 기본적으로 스칼라 타입 데이터만 가져온다. 하지만 JPA에서는 아래와 같이 엔티티, 임베디드 타입, 스칼라 타입 중 하나의 타입을 가져올 수 있다.SELECT m FROM Member -- 엔티티 프로젝션SELECT m.team FROM Membmer m --엔티티 프로젝션SELECT m.address FROM Member m -- 임베디드 타입 프로젝션 (값 타입)SELECT m.username, m.age FROM Member m -- 스칼라 타입 프로젝션SELECT 절에 조회할 대상을 지정하는 것프로젝션 대상엔티티(Entity)임베디드 타입스칼라 타입(숫자, 문자등 기본 데이터 타입)DISTINCT로 중복 제거✅ 01-1. 프로젝션 - 여러 값 조회Query.. 2023. 4. 25. [Spring Data JPA] JPA-객체지향쿼리언어 ⚡ 01. JPA는 다양한 쿼리 방법을 지원JPA는 DataBase에서 데이터를 뽑아오기 위해 다양한 Query를 지원한다JPQLJPA CriteriaQueryDSLNative SQLJDBC API 직접 사용, Mybatis, SpringJdbcTemplate과 함께✅ 01-1 지금까지의 조회 방법지금까지는 단순히 find() 메서드를 사용하여 전체 조회만 수행 해왔다가장 단순한 조회 방법EntityManager.find()객체 그래프 탐색하지만 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면?✅ 01-2 문제점JPA 사용시 엔티티 객체를 중심으로 개발해야 하는데, 문제는조건 검색 쿼리다.모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.또한 필요한 데이터만 DB에서 조회 하려면 검색 .. 2023. 4. 25. [Spring Data JPA] JPA 값타입컬렉션 ⚡ 01. 값 타입 컬렉션값 타입 컬렉션이란 값 타입을 컬렉션에 넣어 사용 하는 것을 의미한다. 값 타입 컬렉션을 DB에서 구현하기 위해서는 MEMBER 테이블을 기준으로 별도의 테이블(FAVORITE_FOOD, ADDRESS)로 분리하여 사용을 해야 한다.✅ 01-1. 값 타입 컬렉션이란?@ElementCollection@CollectionTable(name = "FAVORITE_FOOD", joinColumns = @JoinColumn(name = "MEMBER_ID"))Set favoriteFoods = new HashSet();@ElementCollection@CollectionTable(name = "ADDRESS", joinColumns = @JoinColumn(name = "MEMBER_ID.. 2023. 4. 25. [Spring Data JPA] JPA 값타입과 불변객체 값타입비교 ⚡ 01. 값 타입이란?값 타입은 복잡한 객체 세상을 조금이라도 단순화하기 위해 나온 개념. 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 우리는 개발을 할 때 엔티티에 대해서는 신경을 많이 쓰지만, 값을 변경하는 것에 있어서는 크게 고민을 하지 않는다. 그 이유 자체가 값 타입 자체는 자바 내에서 안전하게 설계가 되어 있기 때문이다.✅ 01-1. 값 타입 공유 참조혹시 어떤 데이터를 공유하여 사용 하려고 한다면 값 타입이 아닌 엔티티로 만들어 사용해야한다. 즉, 절대 값 타입(임베디드 타입)은 공유하여 사용하면 안된다.임베디드 타입(값 타입)은 여러 엔티티에서 공유가 가능하다.임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 상당히 위험하다.즉, 부작용(side effect)이 발생 .. 2023. 4. 25. [Spring Data JPA] JPA 기본값타입 ⚡ 1. 기본값 타입✅ 1-1. 엔티티 타입JPA는 데이터 타입을 최상위 레벨로 바라보았을 때 엔티티 타입과 값 타입 두 가지로 분리할 수 있다.@Entitypublic class Member { //..}@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능✅ 1-2. 값 타입int num = 0;String str = "str";dobule db = 1.0;int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가ex) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체⚡ 2. 값 타입 분류✅ 2-1. 기본값 타입자바 기본 타입(in.. 2023. 4. 25. [Spring Data JPA] JPA 영속성전이와 CASECADE 옵션 1. 영속성 전이 : CASCADE2022-02-22_영속성전이01영속성 전이 CASCADE는 앞에서 설명한 즉시 로딩, 지연 로딩, 연관관계 설정과는 전혀 상관이 없는 부분이다.영속성 전이는 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶을 때 사용이 된다. 대표적인 예로는 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하는 경우를 들 수 있다.1-1. 영속성 전이를 이해하기 위한 기본 예제@Entitypublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList.. 2023. 4. 25. [Spring Data JPA] JPA 즉시로딩와 지연로딩 ⚡ 01. Member를 조회할 때 Team도 함께 조회해야 할까?프록시_01이전 장(프록시)에서 설명한 예시와 같은 맥락이다.단순히 맴버의 데이터만 필요한 경우 팀까지 조인을 해야 하는가?✅ 지연 로딩 사용@Entitypublic class Member { //..중략 @ManyToOne(fetch = FetchType.LAZY) // 지연 로딩 @JoinColumn private Team team; //..중략}우선 지연 로딩을 사용하기 위해서는 FetchType.LAZY키워드를 추가해줘야 한다. 다음은 실제 호출부에서 Member 엔티티를 조회하는 예제를 살펴보자.✅ 지연 로딩 사용(Member 엔티티만 조회)try { Member member = new Member.. 2023. 4. 25. [Spring Data JPA] JPA 프록시와 연관관계관리 ⚡ Member를 조회할 때 Team도 함께 조회해야 할까?프록시_01위 사진을 보면 Member, Team 객체가 존재한다. 이 때 Team 엔티티가 필요 없다면 어떻게 해야할까? 다음 예시를 시작으로 JPA에서의 프록시 개념을 공부해보자.✅ 간단한 예시를 통한 이해@Entityclass Member{ @Id private Long id; // ... @ManyToOne @JoinColumn(name = "team_id") private Team team;}@Entityclass Team{ @Id private Long id; @OneToMany(mappedBy = "team") List memberList = new ArrayList(); /.. 2023. 4. 25. [Spring Data JPA] JPA 상속관계 매핑 실전 예제 ✔ 상속관계 매핑이번 장에서는 실습 위주로 진행이 됩니다. 💡 상속관계 매핑에 대한 추가적인 내용은 해당 링크를 참고 해주세요. 🤣✅ 요구사항 추가상품의 종류는 도서, 음반, 영화가 있고 이후 더 확장될 수 있다.모든 데이터는 등록일과 수정일이 필수다.✅ 도메인 모델상속관계매핑상품(물품) 테이블에 도서, 음반, 영화를 추가하였다.✅ 도메인 모델 상세2022-02-19_상속관계매핑_도메인모델_상세도메인 모델에도 마찬가지로 위 세가지(도서, 음반, 영화)를 추가.✅ 테이블 설계2022-02-19_상속관계매핑_테이블설계테이블은 싱글 테이블로 설계.⚡ 실습 예제✅ Item 도메인@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 테이블 전략.. 2023. 4. 25. 이전 1 2 3 4 다음