반응형
프로젝션
- select 절에 조회할 대상을 지정하는 것
- 프로젝션대상 : 엔티티 , 임베디드 타입 ,스칼라 타입(숫자 , 문자등 기본 데이터 타입)
엔티티
select m from Member m
select m.team from Member m
임베디드 타입
select m.address from Memberm
스칼라 타입
select m.username, m.age from Member m
반환타입이 엔티티 컬랙션 타입인경우 컬렉션안에 엔티티들이 모두 영속성 컨택스트 안에서 관리된다 .
Member member = new Member("user1" , 20);
em.persist(member);
em.flush();
em.clear();
List<Member> result = em.createQuery("select m from Member m where m.username = :username ", Member.class)
.setParameter("username", member.getUsername())
.getResultList();
result.get(0).setAge(20);
result 안에 Member는 모두 영속성 컨텍스트 에서 관리됨.
join을 사용하는 경우에는 jpql에도 sql과 같이 조인문을 써주는 것이 좋다 . 그래야 명식적으로 조인이 나가는 쿼리구나 이해 할 수 있다.
//이렇게만해도 sql 은 조인문으로 나가지만
List<Member> result1 = em.createQuery("select m.team from Member m ", Member.class)
.getResultList();
//명시적으로 조인문이 들어가는 쿼리라는 것을 알려주는 것이 좋다
List<Member> result2 = em.createQuery("select t from Member m join m.team t ", Member.class)
.getResultList();
스칼라 타입에서 여러 값을 조회하는 방법
//스칼라 타입에서 값을 받는 방법
em.createQuery("select m.username,m.age from Member m ")
.getResultList();
//1. Object [] 타입으로 조회
List<Object[]> resultList = em.createQuery("select m.username,m.age from Member m ")
.getResultList();
Object[] objects = resultList.get(0);
System.out.println("objects[0] = " + objects[0]);
System.out.println("objects[1] = " + objects[1]);
tx.commit();
//2.new 명령어로 Dto 생성하여 조회
List<MemberDto> memberDto = em.createQuery("select new JPQL.domain.MemberDto( m.username,m.age) from Member m ", MemberDto.class)
.getResultList();
MemberDto memberDto1 = memberDto.get(0);
System.out.println("memberDto1.getUsername() = " + memberDto1.getUsername());
System.out.println("memberDto1.getAge() = " + memberDto1.getAge());
1.오브젝트 타입으로 받으면 안에 값들이 오브젝트 형식으로 들어간다 많이 사용하는 방식은 아니다.
2.Dto를 생성해서 값을 바인딩 받는다 , 편하지만 값을 담을 Dto를 생성할 때 패키지 명을 포함한 전체 클래스 명을 표기해야하는 불편함이 있다 , 순서와 타입이 일치하는 생성자가 필수다 .
반응형
'JPA' 카테고리의 다른 글
JPA 공부 16 - JPQL . 4 JOIN (0) | 2021.06.06 |
---|---|
JPA 공부 15 - JPQL . 3 페이징 (0) | 2021.06.06 |
JPA 공부 14 - JPQL . 1 (0) | 2021.06.06 |
JPA 공부 13 - 직접 쿼리를 작성하는 방법 (0) | 2021.06.06 |
JPA 공부 12 - 값 타입 collection 사용 (0) | 2021.06.06 |