본문 바로가기
728x90

Back-end/java spring34

[JPA] JPQL 2 - 중급 문법 정리 경로 표현식 간단하게 .(점)을 찍어 객체 그래프를 탐색하는 것을 의미한다. 접근하는 필드의 타입에 따라서 경로 표현식의 종류가 3가지로 나뉘게 된다. 상태 필드 m.username 단일 값 연관 필드 m.team t 컬렉션 값 연관 필드 m.orders o 어떤 필드에 접근하는지에 따라 내부적인 JPA의 동작 방식이 달라지기 때문에, 유의해서 봐야할 개념이라고 한다. 경로 표현식에 대한 용어 정리 우선 상태 필드와 연관 필드로 접근할 수 있는 필드의 경로가 나뉜다. 상태 필드 (status field): 단순히 값을 저장하기 위한 필드 연관 필드 (association field): 연관관계를 위한 필드 단일 값 연관 필드: @ManyToOne, @OneToOne 관계에 대한 즉, 하나의 엔티티 대상 .. 2023. 2. 24.
[JPA] JPQL 1 - 기본 문법 정리 객체 지향 쿼리 언어 JPQL 이란 JPA에서는 다양한 쿼리 방식을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate을 JPA와 같이 사용 앞서 배웠던 엔티티 조회 방식은 Entity manager의 find method 호출을 통한 조회 혹은 객체 그래프 탐색(ex entityA.getB())을 통한 entity 조회였다. 하지만, 조건을 포함한 검색 쿼리 같은 경우는 앞서 사용한 방식으로는 해결이 불가능하다. JPA를 사용하는 경우 엔티티 객체를 중심으로 개발을 할 수 있게 되지만, 결국 애플리케이션에서 필요한 데이터만 조회하기 위해서는 SQL의 도움이 필요하다. JPQL 이러한 문제를 해결하기 위.. 2023. 2. 22.
[JPA] 값 타입 기본값 타입 JPA의 기본적인 데이터 타입 분류는 크게 두가지이다. (최상위 분류) 엔티티 타입 @Entity 어노테이션으로 정의하는 객체 데이터가 변해도 식별자를 이용해서 지속적으로 추적 가능 예) 회원 엔티티의 키나 이름 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 의미 식별자 없고 값만 있어 변경시 추적이 불가능하다. 예) 숫자 100 → 200 변경하면, 완전히 다른 값으로 대체된 것 값 타입 분류 기본값 타입 자바 기본 타입 (int, double ...) Wrapper class (Integer, Double ...) String 임베디드 타입 (embedded type, 복합 값 타입) 컬렉션 값 타입.. 2023. 2. 18.
[JPA] 프록시 프록시 기능을 구현하는 과정에서 DB에서 가져오고 싶은 정보의 범위가 비지니스 로직에 따라 다르기 마련이다. 예를 들어 Member와 Team이라는 두 개의 entity가 연관관계 상에 있을 때, 구현 목적에 따라 두 개의 데이터가 한번에 조회되는 것이 좋을수도 있고, 그렇지 않을수도 있다. 이러한 상황을 JPA는 프록시와 지연로딩이라는 개념으로 기가막히게(?) 해결해준다고 한다. 먼저 프록시의 개념은 다음과 같다. 프록시 기초 em.find(): 앞서 살펴본 데이터베이스를 통해 실제 엔티티 객체를 조회하는 메서드 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회하는 메서드 기존에 알던 EntityManager의 find method 말고, getReferen.. 2023. 2. 15.
[JPA] 고급 매핑 상속관계 매핑 객체는 상속관계가 있지만, 관계형 데이터베이스는 상속관계 X 슈퍼타입, 서브타입 관계라는 모델링 기법이 그나마 객체 상속과 유사하다 상속관계 매핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 데이터베이스 논리 모델을 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 조인 전략: 각각 테이블로 변환 단일 테이블 전략: 통합 테이블로 변환 구현 클래스마다 테이블 전략: 서브타입 테이블로 변환 객체는 상속관계를 지원하기 때문에, 그냥 매핑하면 된다. 결론은 DB에서 세가지 중 어떤 방식으로 물리 모델을 구현하더라도, JPA를 이용하면 모두 객체와 매핑이 가능하도록 지원한다는 점이다. 조인 전략 위의 다이어그램은 조인 전략을 사용하는 경우이고, 각각의 테이블에 중복되는 정보.. 2023. 2. 6.
[JPA] 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 (연관관계 차수) 단방향 or 양방향 연관관계 주인 설정 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 다중성과 관련되어 헷갈리는 경우 반대 엔티티에서의 연관관계 차수를 생각해보자! (다중성은 대칭성을 띄기 때문이다.) 참고: 다대다 관계는 실무에서 사용하면 안 된다. 왜 그런지에 대해서는 뒤에서 공부하자. 단방향과 양방향 테이블 외래 키 하나로 양쪽 조인이 모두 가능 사실상 방향이라는 개념이 없다. 객체 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향 양쪽에 필드를 만들어 서로 참조해야 양방향 사실 양방향이란 개념은 없다. (참조의 입장에서 사실은 두 개의 단방향이다).. 2023. 2. 1.
728x90