JPA에서 @Query 애너테이션을 사용할 때, 일반적으로 @Param 애너테이션을 사용하여 파라미터명과 매핑할 이름을 지정해주어야 합니다. 하지만 다음과 같은 경우에는 @Param을 생략할 수 있습니다. 파라미터명과 매핑할 이름이 동일한 경우 예를 들어, 다음과 같이 파라미터명과 매핑할 이름이 모두 "name"인 경우에는 @Param을 생략할 수 있습니다. @Query("SELECT u FROM User u WHERE u.name = :name") User findByName(String name); 파라미터가 하나인 경우 파라미터가 하나뿐인 경우에는 @Param을 생략할 수 있습니다. 이 경우에는 파라미터명과 매핑할 이름이 자동으로 "0", "1", "2" 등으로 지정됩니다. @Query("SELEC..
소스 코드는 여기 있습니다. (commit hash: 0bacabb) > git clone https://github.com/lcalmsky/jpa > git checkout 0bacabb Overview 연관관계 매핑 예제를 구현합니다. 테이블 구조 객체 구조 구현 테이블 구조에서 확인했다시피 FK를 가지는 테이블은 orders, order_item 두 가지이고, 객체 기준으로는 Order, OrderItem이 연관관계의 주인이 됩니다. 따라서 Order가 Member를 @ManyToOne으로 가지고, @JoinColumn(name = "member_id")을 사용해 join 할 수 있습니다. OrderItem이 Order를 @ManyToOne으로 가지고, @JoinColumn(name = "order..
소스 코드는 여기 있습니다. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview 양방향 연관관계를 맺을 때 관리의 주체인 연관관계 주인에 대해 알아봅니다. 연관관계의 주인(Owner) 양방향 연관관계를 맺을 때 규칙은 다음과 같습니다. 객체의 두 관계중 하나를 연관관계의 주인으로 지정 ex) Member 객체가 가진 Team이 주인이 될지 Team 객체가 가진 Members가 주인이 될지 정함 연관관계의 주인만 FK를 관리(등록, 수정 등) 주인이 아닌 쪽은 읽기만 가능 주인이 아닌 쪽에서 mappedBy 속성으로 주인 지정 그렇다면 두 관계 중 어떤 것을 주인으로 지정하는 게 타..
소스 코드는 여기 있습니다. (commit hash: e336ad7) > git clone https://github.com/lcalmsky/jpa > git checkout e336ad7 Overview 단방향 연관관계를 설명합니다. JPA를 설명하기 위해 포스팅하는 글이지만 스프링 내에서 사용하는 경우가 많아 스프링 부트 프로젝트로 구성하였습니다. 프로젝트를 구성하는 내용은 다른 포스팅에도 그동안 많이 작성하였기 때문에 생략하였습니다. 객체 지향 모델링 저번 포스팅에서와 다르게 객체지향적으로 모델링한 모습은 아래와 같습니다. 객체 연관관계 Member 객체가 Team 객체를 참조하기 위해선 teamId를 가지는 게 아니라 Team 객체를 참조하고 있어야 합니다. 테이블 연관관계 코드로 나타내면 다음과..
Overview 객체와 테이블과 연관관계의 차이를 이해하기합니다. 예제 시나리오 단방향 연관관계에 대해 설명하기 위해 아래와 같이 세 가지 상황을 가정합니다. 회원과 팀 회원은 하나의 팀에만 소속될 수 있음 회원:팀=N:1 연관관계가 필요한 이유 예제 시나리오의 상황을 다이어그램으로 나타내면 다음과 같습니다. 객체 연관관계 테이블 연관관계 테이블에 맞춰서 객체를 모델링하게되면 서로 아무 관계가 없는 객체가 되어버립니다. 테이블끼리는 FK를 이용해 관계를 나타낼 수 있지만 객체는 다른 객체의 ID를 갖고있다고해도 서로 관계가 있다고 보긴 힘듭니다. 이를 자바 코드로 나타내면 다음과 같습니다. package com.tistory.jaimenote.jpa.domain.entity; import javax.pe..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 Querydsl의 기본 문법을 소개합니다. 기본 Join 첫 번 째 파라미터에 join할 대상, 두 번 째 파라미터에 별칭으로 사용할 Q Type을 지정합니다. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBoot..
스프링 부트 2.6 이상은 아래 글을 참고해주세요. 2022.08.23 - [Querydsl] - 스프링부트 2.6 이상 버전에서 Querydsl 설정 방법 모든 소스 코드는 여기 있습니다. Querydsl을 사용하기 위해 프로젝트 설정부터 차근차근 달려봅시다! 먼저 자바 버전은 11, 스프링 버전은 2.5.2를 선택하였고 gradle 프로젝트로 생성하여 아래 네 가지 dependency를 설정하였습니다. spring-boot-starter-web spring-boot-starter-data-jpa lombok h2 build.gradle 위와 같이 설정하셨다면 build.gradle 파일이 아래 처럼 작성되었을텐데요, plugins { id 'org.springframework.boot' version..
스프링 데이터 JPA가 제공하는 공통 구현체를 분석해봅시다. SimpleJpaRepository는 JpaRepository를 구현하는 구현체로 기본적인 CRUD가 어떻게 동작하는지 확인할 수 있습니다. 약 1000 라인에 가까운 소스 코드가 내부적으로 EntityManager를 주입받아 JPA를 직접 사용하는 방식으로 구현되어 있습니다. 몇 가지 구현된 기능들을 살펴보겠습니다. 조회 CRUD중 R에 해당하는 것으로 select 동작 중 PK로 한 row를 가져올 때 사용합니다. @Override public Optional findById(ID id) { Assert.notNull(id, ID_MUST_NOT_BE_NULL); Class domainType = getDomainClass(); // (1)..
모든 소스 코드는 여기에서 확인 가능합니다. API에서 페이징 활용 지난 번에 스프링 데이터 JPA가 페이징 및 정렬을 지원하는 부분을 살펴봤었는데요, API 형태로 제공될 때는 어떻게 활용될 수 있는지 Controller를 개발해 확인해보겠습니다. package io.lcalmsky.springdatajpa.controller; import io.lcalmsky.springdatajpa.domain.entity.Member; import io.lcalmsky.springdatajpa.domain.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; impo..
모든 소스 코드는 여기에서 확인 가능합니다. Entity를 생성하거나 변경할 때, 각각의 시간과 담당자를 추적할 필요가 있습니다. 특히 실무에서 이력을 남기기위해 많이 쓰이는 기능인데요, 이렇게 하기 위해선 Entity마다 필요에따라 생성 시간, 수정 시간, 생성한 사람, 수정한 사람 이 네 가지 속성을 가져야 합니다. JPA를 사용할 경우 Entity가 결국 객체이기 때문에 공통적인 속성을 모두 가지는 클래스를 설계하면 간단히 해결할 수 있는데요, 그 방법을 한 번 살펴보겠습니다. BaseEntity 정의 생성 시간, 수정 시간을 가지는 Entity를 작성합니다. package io.lcalmsky.springdatajpa.domain.entity; import javax.persistence.Colu..
- Total
- Today
- Yesterday
- 스프링 부트 튜토리얼
- 헥사고날 아키텍처
- 스프링 부트
- JSON
- Spring Data JPA
- spring boot application
- 함께 자라기 후기
- proto3
- 스프링 부트 애플리케이션
- Spring Boot Tutorial
- 스프링부트
- Java
- 클린 아키텍처
- spring boot jwt
- JPA
- Jackson
- 알고리즘
- Linux
- Spring Boot JPA
- intellij
- Spring Boot
- leetcode
- r
- QueryDSL
- @ManyToOne
- 함께 자라기
- spring boot app
- 스프링 부트 회원 가입
- gRPC
- 스프링 데이터 jpa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |