본문 바로가기
728x90

ORM9

[ JPA ] Java Persistence Query Language(JPQL , 객체 지향 쿼리 언어)(1) Intro JPA는 엔티티 객체를 중심으로 개발하기 때문에 검색 쿼리 실행하면 테이블 대상이 아닌 엔티티 객체를 대상으로 요청을 보내야 한다. 하지만 모든 데이터베이스 데이터를 객체로 변환해서 검색하는 것은 불가능하며 애플리케이션이 필요한 데이터만 가져오려면 결국 검색 조건이 포함된 SQL을 사용해야 한다. 오늘은 검색 조건에 엔티티 객체를 대상으로 요청을 보내기 위한 객체 지향 쿼리 언어에 대해 알아보자. JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 사용하는 객체지향 쿼리 언어이다. 따라서 테이블을 대상으로 하지 않고 엔티티 객체를 대상으로 쿼리를 수행하며 추상화를 통해서 특정 데이터베이스 SQL에 의존되지 않게 개발할 수 있다. 실제 수행할 때는 .. 2024. 4. 3.
[ JPA ] 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER) Intro 이전 포스팅에서 프록시(Proxy)에 대한 글을 작성했습니다. 프록시(Proxy)는 이번 포스팅에서 즉시 로딩(EAGER)과 지연 로딩(LAZY)을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시 로딩(EAGER)과 지연 로딩(LAZY)에 대한 개념에 대해 먼저 알아보자. 예제 테이블로 Member와 Team이 있다고 가정해보자. Member를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려 있다고 해도 손해이다. JPA에서는 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두 가지 방식이 있다. 이 두 가지 방식을 간단하게 설명하면 즉시 로딩(EAGER)은 데이터를 조회할 때 연관된 데.. 2024. 3. 26.
[ JPA ] 상속 관계 매핑 Intro 관계형 데이터베이스에는 객체 지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환 각 테이블을 생성하고 조회할 때 조인을 사용한다. 통합 테이블로 변환 테이블을 하나만 사용해서 통합한다. (JPA에서는 단일 테이블 전략이라 한다.) 서브타입 테이블로 변환 서브 타입마다 하나의 테이블을 만든다. (JPA에서는 구현 클래스마다 테이블 전략이라 한다.) 세 가지 방법 모두 JPA를 통해 .. 2024. 3. 18.
[ JPA ] 다양한 연관관계 매핑 연관관계 매핑 시 고려사항 3가지 엔티티의 연관관계를 매핑할 때는 다음 3가지 고려사항이 있다. [ 다중성 ] 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 다대다는 실무에서 사용하면 안 된다. [ 단방향, 양방향 ] 테이블의 외래 키(FK) 하나로 조인을 사용해서 양방향으로 쿼리가 가능하므로 사실상 방향이라는 개념이 없다. 객체는 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있다. 객체 관계에서 한쪽만 참조하는 것을 단방향, 양쪽에서 서로 참조하는 것을 양방향이라고 한다. [ 연관관계의 주인 ] JPA는 두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키(FK)를 관리하는데 이것을 연관관계의 주인이라 한다. 외래 키.. 2024. 3. 13.
[ JPA ] 연관관계 매핑 기초 연관관계 매핑? 연관관계 매핑이란 객체의 참조와 테이블의 외래 키를 매핑하는 것을 의미한다. JPA에서는 연관 관계에 있는 상대 테이블의 PK를 멤버 변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다. 실제로 웹 애플리케이션에서 하나의 엔티티 타입만을 이용하는 경우는 많지 않다. 예를 들어 Member Entity, Team Entity가 있을 때, Team은 여러 Member를 갖는 관계를 가지고 있다. 물론 단순히 참조하는 것만으로는 연관관계를 맺을 수 없다. 매핑하는 방법은 뒤에서 알아보도록 하고, 그전에 연관관계 매핑을 이해하기 위한 3가지 키워드에 대해 알아보자. 방향( Direction ) 방향에는 단방향과 양방향이 있다. 단방향 관계 두 엔티티가 관계를 맺을 때, 한쪽의 엔티티만 참조하.. 2024. 3. 7.
[ JPA ] Entity Mapping Entity Mapping Entity Mapping은 객체와 데이터베이스 테이블 간의 매핑을 정의하는 작업을 말한다. Java 언어로 정의된 Entity Class와 데이터베이스의 릴레이션(테이블) 간에 어떤 관계를 맺을지를 지정하는 것이며, 이를 통해 객체 지향 프로그래밍과 관계형 데이터베이스 간의 변화를 가능하게 한다. Entity Mapping을 통해 Entity Class의 필드와 데이터베이스의 칼럼을 매핑하고, 객체 간의 관계를 데이터베이스의 외래 키(Foreign Key)와 연결하는데, JPA를 사용하여 데이터베이스와 상호작용하는데 필요한 정보를 제공해 준다. Entity Mapping은 아래와 같이 크게 4가지로 분류할 수 있다. 객체와 테이블 매핑: @Entity, @Table 기본 키 .. 2024. 2. 26.
728x90