본문 바로가기
반응형

JPA14

JPA DB 컬럼 네이밍 문제 Physical Naming Strategy (물리적 명칭 전략) 회사 프로젝트의 JPA 네이밍 전략이 CamelCaseToUnderscoresNamingStrategy 로 세팅되어 있었는데, jpa.properties.hibernate.physical_naming_strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy 해당 전략은 필드 네임이 CamelCase 로 되어있으면 자동으로 snake_case 로 변경해주는 기능이다. 문제는 대부분의 DB 테이블 컬럼이 snake_case 로 되어있었는데, 일부 테이블에서의 컬럼은 CamelCase 로 되어있었다.. 그래서 처음에는 CamelCase 로 된 녀석만 따로 @Col.. 2023. 9. 5.
SpringBoot 3.0 에서의 Querydsl 적용 springBoot 3.0 에 JPA 를 도입하면서 몇가지 바뀐점이 있어 Querydsl 적용이 안되는 이슈가 있었다. Jakarta EE 기존 오라클 프로젝트인 JavaEE 를 이클립스 재단으로 이관하면서 상표권 문제 때문에 JavaEE 의 패키지 네임 인 ‘javax.’ 를 JakartaEE 로 만들어 ‘jakarta.’ 로 변경하였다. Java Persistence API (javax.persistence) -> Jakarta Persistence (jakarta.persistence) 따라서 build.gradle 에 아래와 같이 설정해주어야 한다. implementation 시 마지막은 :jakarta 임에 주의한다. ... ext { querydslVersion = '5.0.0'.. 2023. 8. 31.
Querydsl - 3편 Null, 빈 값 체크 Spring 에서 제공하는 StringUtils.hasText() 를 사용하면 된다. if (StringUtils.hasText(condition.getUsername())) { } StringUtils isEmpty Deprecated String 을 null 체크, 빈 값 체크하기 위해 StringUtils.isEmpty() 를 사용했으나, Deprecated 되었길래 대안을 찾아보았다. String 타입이라면 hasLength 또는 hasText 를 사용하라. Object 타입이라면 ObjectUtils 의 isEmpty 를 사용하라. BooleanBuilder 로 동적 쿼리를 만들 때 주의할 점 MemberSearchCondition condition = new Member.. 2022. 2. 15.
Querydsl - 2편 프로젝션 프로젝션이란 select 대상을 지정하는 것이다. 프로젝션 대상이 하나인 경우 List result = queryFactory.select(member.username) .from(member) .fetch(); List result = queryFactory.select(member) .from(member) .fetch(); 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 프로젝션 대상이 둘 이상이면 튜플이나 DTO 로 조회 튜플 조회 프로젝션 대상이 둘 이상일 때 사용 List result = queryFactory.select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { Stri.. 2022. 2. 8.
Querydsl - 1편 현업에서 Spring Data JPA + Querydsl 은 거의 무조건 사용되므로 잘 이해하고 사용하자. Querydsl 장점 쿼리를 자바 코드로 작성하여 문법 오류를 컴파일 시점에 잡음 동적 쿼리 문제 해결 쉬운 SQL 스타일 문법 build.gradle 설정 Spring Boot 2.6 이상 버전에서는 Querydsl 5.0 을 사용하므로 아래와 같이 querydsl-jpa, querydsl-apt 을 추가하고, 버전을 명시해주어야 한다. querydsl-jpa : 실제 애플리케이션에서 Querydsl 을 사용할때 필요한 라이브러리 querydsl-apt : Q 클래스를 만드는 용도로 쓰임 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { i.. 2022. 2. 8.
JPA 를 공부하면서 알게 된 내용 정리 4 Spring Data JPA - 3편 JpaRepository 분석하기 JpaRepository 를 까보면 구현체로 SimpleJpaRepository 를 사용한다. @Repository 를 적용해서 JPA 예외를 스프링이 추상화 한 예외로 변환한다. @Transactional 트랜잭션 적용 JPA 의 모든 동작은 트랜잭션 안에서 동작 스프링 데이터 JPA 는 변경 (등록, 수정, 삭제) 메서드를 트랜잭션 처리 서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작 서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파 받아서 사용 그래서 스프링 데이터 JPA 를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경이 가능했던 것이다. (사실은 트랜잭션이 리포지토리 계층에 걸려있.. 2022. 2. 5.