본문 바로가기
반응형

Backend, Server/JPA12

[JPA] JPQL 중급 - (2) 다형성 쿼리, 엔티티 직접 사용, named 쿼리, 벌크 연산 다형성 쿼리 - TYPE - 조회 대상을 특정 자식으로 한정 • 예) Item 중에 Book, Movie를 조회해라 • [JPQL] select i from Item i where type(i) IN (Book, Movie) • [SQL] select i from i where i.DTYPE in (‘B’, ‘M’) //DTYPE은 설정을 통해 미리 지정할 수 있음 - TREAT • 자바의 타입 캐스팅과 유사 • 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 • FROM, WHERE, SELECT(하이버네이트 지원) 사용 • 예) 부모인 Item과 자식 Book이 있다. • [JPQL] select i from Item i where treat(i as Book).auther = ‘kim’.. 2021. 12. 21.
[JPA] JPQL 중급 - (1) 경로 표현식, 페치 조인**(중요!) 경로 표현식 경로 표현식이란 점을 찍어 객체 그래프를 탐색하는 것 용어 정리 • 상태 필드(state field): 단순히 값을 저장하기 위한 필드 (ex: m.username) • 연관 필드(association field): 연관관계를 위한 필드 • 단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team) • 컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 경로 표현식 특징 • 상태 필드(state field): 경로 탐색의 끝, 탐색X • 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O • 컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색X -> FROM 절에서 명시적 .. 2021. 12. 20.
[JPA] JPQL 기초 - (2) 조인, 서브쿼리, 조건식, JPQL 함수 조인 // []는 생략 가능 • 내부 조인: SELECT m FROM Member m [INNER] JOIN m.team t • 외부 조인: SELECT m FROM Member m LEFT [OUTER] JOIN m.team t • 세타 조인: select count(m) from Member m, Team t where m.username = t.name 조인 - on 활용 1. 조인 대상 필터링 • 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인 JPQL: SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A' SQL: SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.TEAM_ID=t.id a.. 2021. 12. 20.
[JPA] JPQL 기초 - (1) 파라미터 바운딩, 프로젝션, 페이징 JPQL(Java Persistence Query Language) • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공(특정데이터베이스 SQL에 의존하 지 않는다.) • SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 • JPQL은 엔티티 객체를 대상으로 쿼리 • SQL은 데이터베이스 테이블을 대상으로 쿼리 TypeQuery, Query • TypeQuery: 반환 타입이 명확할 때 사용 • Query: 반환 타입이 명확하지 않을 때 사용 TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class); Query query = em.createQuery("SE.. 2021. 12. 19.
[JPA] 값 타입 알아보기 엔티티 타입 VS 값 타입 • 엔티티 타입 • @Entity로 정의하는 객체 • 데이터가 변해도 식별자로 지속해서 추적 가능 • 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 • 값 타입 • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 • 식별자가 없고 값만 있으므로 변경시 추적 불가 • 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 • 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값타입으로 구성됨 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값타입으로 구성됨 기본값 타입 - String, int - 생명주기를 엔티티에 의존(회원을 삭제하면 이름, 나이 필드도 같이 삭제됨) - 값 타입은 공유하면 안됨(회원 이름 변경.. 2021. 12. 19.
[JPA] 프록시, 즉시 로딩과 지연 로딩, 영속성 전이, 고아 객체 프록시 프록시란? - em.find() 대신 em.getReference() 사용 - 프록시는 데이터베이스 조회를 미루는 가짜 엔티티 객체를 조회한다. 프록시의 특징 - 실제 클래스를 상속받아 만들어지고, 겉모습이 같다. - 사용하는 입장에서는 이론상 프록시인지 진짜 객체인지 구분하지 않고 사용 - 프록시 객체는 실제 객체의 참조(target)을 보관 - 프록시 객체 호출 시 실제 객체의 메서드를 호출(delegate) 프록시 객체 초기화 초기화 시 영속성 컨텍스트를 통해 db를 조회한다. Member member = em.getReference(Member.class, “id1”); member.getName(); 주의할 점 - 처음 사용할때 한번만 초기화된다. - 초기화를 한다고 프록시 객체가 실제 .. 2021. 12. 15.
반응형