본문 바로가기
728x90
반응형

Dev/JPA35

[JPA] 객체지향 쿼리 문법 - 중급문법(2) 다형성 쿼리 상속 관계에 있는 엔티티 조회 시 다형성을 사용하여 특정 엔티티 타입만 조회할 수 있다. 예제 구조 Type 조회 대상을 특정 자식으로 한정 TYPE(부모 엔티티 별칭) JPQL의 TYPE()이 SQL에서는 DTYPE(= 구분컬럼)으로 변경되어 실행된다. Book book = new Book(); book.setName("new bookname"); book.setAuthor("new author"); em.persist(book); Movie movie = new Movie(); movie.setActor("new actor"); movie.setDirector("new director"); em.persist(movie); // TYPE() String query = "select i f.. 2021. 9. 11.
[JPA] 객체지향 쿼리 언어 - 중급문법 (1) 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 용어 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 (ex. m.username) 연관 필드(association field) : 연관관계를 위한 필드 단일값 연관 필드 : @ManyToOne, @OneToOne처럼 타겟 대상이 엔티티 (ex. m.team) 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany처럼 타겟 대상이 컬렉션 (ex. m.orders) 특징 상태 필드(state field) : 경로 탐색의 끝으로 더 이상 탐색 불가, JPQL과 SQL이 동일하다. 단일값 연관 경로 : 묵시적 내부 조인(INNER JOIN)이 발생하며 추가적으로 탐색이 가능, 묵시적 조인이 발생하기 때문에 조심해서 사용해.. 2021. 9. 10.
[JPA] 객체지향 쿼리 언어 - 기본문법 (2) 조인 내부 조인 (INNER JOIN) SQL INNER JOIN과 동일하며 INNER는 생략 가능하다. // 내부조인 (inner 생략 가능) String query = "select m from Member m inner join m.team t"; List result = em.createQuery(query, Member.class).getResultList(); 외부 조인 (LEFT OUTER JOIN) SQL LEFT OUTER JOIN과 동일하며 OUTER는 생략 가능하다. // 외부조인 (outer 생략 가능) String query = "select m from Member m left outer join m.team t"; List result = em.createQuery(query,.. 2021. 9. 8.
[JPA] 객체지향 쿼리 언어 - 기본 문법 (1) 객체지향 쿼리 언어 개요 JPA를 사용하면 엔티티 객체를 중심으로 개발을 하기 때문에 검색 쿼리 실행시에도 테이블 대상이 아닌 엔티티 객체를 대상으로 검색을 해야한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 검색하는 것은 불가능하며 애플리케이션이 필요한 데이터만 가져오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. JPQL JPA가 제공하는 SQL을 추상화한 객체 지향 쿼리 언어 SQL과 문법 유사, ANSI 표준 지원 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 엔티티 객체를 대상으로 쿼리하고 SQL은 데이터베이스 테이블을 대상으로 쿼리한다. 예제 // JpaMain.java List result = em.createQuery("select m From .. 2021. 9. 7.
[JPA] 실습 - 값 타입 매핑 이전 실습에서 값 타입을 매핑해보자 요구사항 Member내 Address값 타입 추가 Delivery내 Address값 타입 추가 엔티티 설계 실습 Entity - Address.java @Embeddable // 임베디드 타입 설정 public class Address { @Column(length = 10) // 컬럼 사이즈 private String city; @Column(length = 20) private String street; @Column(length = 5) private String zipcode; // 의미있는 메소드 구성 가능 public String fullAddress() { return getCity() + " " + getStreet() + " " + getZipcode(.. 2021. 9. 2.