JPA/Spring Data JPA

JPA/Spring Data JPA

[JPA] JPA AttributeConverter를 사용하여 자동으로 변환된 값을 바인딩하기

🔖 개요 DB에 어떤 값을 저장할 때 전/후처리가 필요한 요구사항이 있을 수 있다. 예를 들어, 사용자의 개인 정보를 암호화해서 저장하는 경우 혹은 데이터베이스에 저장된 값을 불러올 때 Static 한 인스턴스로 변환해야 하는 경우이다. 예시로 작성한 다음의 Entity를 보자. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /* * 1. 데이터 베이스에 저장될 때 암호화 * 2. 데이터 베이스에서 값을 읽어올 때 복호화 * */ private String phon..

JPA/Spring Data JPA

[QueryDsl] Page, Slice (페이지네이션, 무한 스크롤)

개요 페이지네이션과 무한 스크롤은 사용자가 컨텐츠를 조작할 때 중요한 역할을 합니다. 사용자가 특정 정보를 탐색하는 과정에 영향을 미치기 때문에 UX에서 매우 중요한 요소라고 볼 수 있습니다. 페이지네이션 페이지네이션은 일반적으로 웹 사이트나 애플리케이션에서 긴 목록이나 검색 결과를 페이지 단위로 분할하는 방법입니다. 이를 통해 사용자는 전체 목록을 한 번에 볼 필요 없이 필요한 부분만 볼 수 있습니다. 이는 사용자가 페이지를 넘기는 데 필요한 시간을 줄이고, 빠르게 원하는 정보를 찾을 수 있도록 도와줍니다. 무한 스크롤 반면, 무한 스크롤은 사용자가 스크롤을 내릴 때마다 새로운 컨텐츠가 계속해서 로드되는 방식입니다. 이것은 사용자가 스크롤을 내리는 행위, 즉 새로운 컨텐츠를 필요로 할 때마다 일정량의 ..

JPA/Spring Data JPA

[QueryDsl] 동적 쿼리 사용하기 [검색 기능 구현]

개요 프로젝트를 진행하면서, 여러 조건에 따라 선택적으로 게시글을 조회하는 요구사항이 생겼습니다. 쉽게 말해 검색 기능을 구현해야했던 것입니다. 요구사항에서 추출한 검색 조건 및 필터는 다음과 같습니다. 제목 (포함) 태그 (포함) 카테고리 (정확히 일치) 게시글 상태 (정확히 일치) N일전 게시글 (포함) 조건은 주어진 텍스트가 값에 포함되어있다면 조회하고, (정확히 일치) 조건은 말 그대로 값이 정확히 일치해야 조회한다는 뜻입니다. 위 요구사항대로 검색조건을 구현하기 위해선, SQL의 WHERE 조건절에 'LIKE'나 '=' 연산자를 통해 주어진 조건에 일치하는 데이터만 조회해야합니다. 앞선 검색 조건들이 항상 모두 적용되지는 않고, 보통 일부 조건만 사용하기 때문에 순수 SQL문을 사용한다면 검색 ..

JPA/Spring Data JPA

[QueryDsl] @DataJpaTest 에서 @Repository 테스트하기

개요 프로젝트 진행중에 QueryDsl을 사용하는 CustomRepository를 만들었다. 여러 엔티티를 JOIN하여 데이터를 조회할 예정이였기 때문에 JpaRepository에 상속하지 않고 @Repository 어노테이션을 붙여 스프링 빈으로 등록하여 사용하고 있었다. 코드는 다음과 같다. Repository @RequiredArgsConstructor @Repository public class AdminRepository implements ApplimentSearchRepository { private final JPAQueryFactory queryFactory; @Override public Optional findApplimentMemberById(Long applyId) { ... } ..

JPA/Spring Data JPA

[QueryDsl] Spring boot 3.0 이상 gradle 설정

개요 QueryDSL은 정말 좋은 라이브러리이지만 설정이 조금 까다롭다는 단점이 있다. 특히 Spring Boot 버전이 3.xx 대로 올라오면서 기존 설정들이 제대로 동작하지 않는 문제가 발생하였다. 이러한 문제들을 해결한 QueryDsl 설정들을 기록 및 공유하려고 한다. 환경 Spring Boot : 3.0.3 Spring Data Jpa : 3.0.2 JDK : 17 IDE : Intellij - 3.3 🌊 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.3' id 'io.spring.dependency-management' version '1.1.0' //querydsl 추가 id "com.ewerk.grad..

JPA/Spring Data JPA

[JPA] 복합키 매핑하기 (@EmbeddedId, @MapsId, isNew())

JPA에서 식별자를 둘 이상 사용하려면 별도의 식별자 클래스를 만들어야한다. 이 경우, 식별 관계를 매핑하기 위해 실수했던 부분과 직접 ID값을 할당할 때 발생할 수 있는 문제점에 대해 기록하려고 한다. 🔑 복합키 : 비식별 관계 매핑 - @EmbeddedId 둘 이상의 컬럼으로 구성된 복합 기본 키를 매핑하기 위해서는 별도의 식별자 클래스를 생성해야한다. 다음의 RECRUIT_CATEGORY 테이블은 CATEGORY 테이블의 PK인 category_id와 RECRUITMENT 테이블의 PK인 recruiment_id 를 FK로 받아, 복합 키로 사용한다. JPA에서는 @IdClass 와 @EmbeddedId 2가지 방법으로 복합키를 매핑할 수 있다. @EmbeddedId 가 조금 더 객체지향에 가까운 ..

KAispread
'JPA/Spring Data JPA' 카테고리의 글 목록