분류 전체보기(75)
-
JPQL - 페치 조인(Fetch Join)
페치 조인은 SQL에서 이야기하는 조인의 종류는 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능이다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데 join fetch 명령어로 사용할 수 있다. 엔티티 패치 조인 패치 조인을 사용해서 회원 엔티티를 조회하면서 연관된 팀 엔티티도 함께 조회하는 JPQL을 보자. select m from Member m join fetch m.team 예제를 보면 join 다음에 fetch라 되어있는데, 이렇게 하면 연관된 엔티티나 컬렉션을 함께 조회하는데 여기서는 회원(m)과 팀(m.team)을 함께 조회한다. 참고로 일반적인 JPQL 조인과는 다르게 m.team 다음에 별칭이 없는데 페치 조인은 별칭을 사용할 수 없다. 실행된 SQL은 다음과 같다..
2023.10.12 -
mind + A : A를 신경쓰다
두번째 전화영어를 진행했다. 아직 전혀 익숙해지지 않아서 긴장을 많이 하고 전화를 받았고, 첫날보다는 그래도 나아졌다고 생각했다.. 아마두..ㅋㅋ 정적이 꽤 오랜시간 흐른적도 많지만...ㅋ 오늘 배운 표현은 "mind + A" "A를 신경쓰다" 이다. Never mind, thank you. (신경쓰지 마세요, 감사합니다.) Barry Don't mind. (베리는 신경 안 써.) Do you mind if I ask how old you are? (실례지만, 나이가 어떻게 되시나요?) Do you mind if I open the window? (제가 창문을 좀 열어도 될까요?) Feel free to use the kitchen. Don't mind me. (언제든지 주방을 사용하셔도 좋아요. 저 신..
2023.10.12 -
JPQL 조인
내부 조인 내부조인은 INNER JOIN을 사용하고, INNER는 생략할 수 있다. String teamName = "팀A"; String query = "SELECT m FROM Member m INNER JOIN m.team t " +"WHERE t.name = :teamName"; List members = em.createQuery(query, Member.class) .setParameter("teamName", teamName) .getResultList(); 회원과 팀을 내부 조인해서 '팀A'에 소속된 회원을 조회한다. 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t 다음과 같이 사용하고, OUTER는 생략 가능하다. 컬렉션 조인 일대다 관..
2023.10.10 -
JPQL - (기본 문법, 쿼리 API, 페이징 API, 집합과 정렬)
기본 문법과 쿼리 API JPQL도 SQL과 비슷하게 SELECT, UPDATE, DELETE 문을 사용할 수 있다. 참고로 엔티티를 저장할 때는 EntityManager.persist() 메소드를 사용하면 되므로 INSERT 문은 없다. select_문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] SELECT 문 SELECT 문은 다음과 같이 사용한다. SELECT m FROM Member AS m where m.username = 'Hello' 엔티티와 속성은 대소문자를 구분한다. (Member, username..
2023.09.25 -
객체지향 쿼리 언어 소개
JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 쿼리 기술을 지원한다. EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다. 이렇게 조회한 엔티티에 객체 그래프 탐색을 사용하면 연관된 엔티티들을 찾을 수 있다. 이 둘은 가장 단순한 검색 방법이다. 식별자로 조회 EntityManager.find() 객체 그래프 탐색 a.getB().getC() 이 기능만으로 애플리케이션을 개발하기는 어렵다. 예를 들어 나이가 24살 이상인 회원을 모두 검색하고 싶다면 좀 더 현실적이고 복잡한 검색 방법이 필요하다. 결국 데이터는 데이터베이스에 있으므로 SQL로 필요한 내용을 최대한 걸러서 조회해야 한다. 하지만 ORM을 사용하면 데이터베이스 테이블이 ..
2023.09.22 -
값 타입
값 타입은 3가지로 나눌 수 있다. 기본값 타입(자바 기본 타입, 래퍼 클래스, String) 임베디드 타입 컬렉션 값 타입 1. 기본값 타입 @Entity public class Member { @Id @GeneratedValue private Long id; private String name; private int age; ... } Member 엔티티에서 String, int가 값 타입이다. Member 엔티티는 id라는 식별자 값도 가지고 생명주기도 있지만 값 타입인 name, age 속성은 식별자 값도 없고 생명주기도 회원 엔티티에 의존한다. 따라서 회원 엔티티 인스턴스를 제거하면 name, age 값도 제거된다. 그리고 값 타입은 공유하면 안된다. 2. 임베디드 타입(복합 값 타입) 새로운 ..
2023.09.22