Java/JPA
-
[JPA] Auditing 설정 방법Java/JPA 2019. 8. 15. 21:21
데이터 베이스에 정보를 저장할 때, 생성일, 최근 수정일, 작성자, 최근 수정자 컬럼은 항상 포함이 되어있습니다. 이러한 컬럼들을 저장하기 위해서 항상 반복적인 코드 작성이 발생합니다. 이런 귀찮은 작업들을 JPA에서는 Auditing이라는 기능으로 처리할 수 있습니다. 설정 방법은 상당히 간단합니다. 먼저 Auditing 필드를 포함하는 BaseEntity 클래스입니다. BaseEntity는 인스턴스를 직접 만들 수 없도록 abstract 클래스로 작성하였습니다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseEntity { @CreatedDate private LocalD..
-
QueryDSL 서브 쿼리 사용법Java/JPA 2019. 7. 14. 17:44
QueryDSL 에서는 서브 쿼리도 작성이 가능합니다. 다만 모든 절에서 지원하는 것은 아니고, select 절과 where 절에서만 지원합니다. 먼저 select 절에서의 서브 쿼리를 보겠습니다. @Data @NoArgsConstructor @AllArgsConstructor public class MemberCountDTO { private String teamName; private Long memberCount; } 우선 쿼리의 결과로 팀의 이름과, 팀에 속한 멤버들의 수를 담는 DTO 클래스입니다. SELECT 절에서의 SubQuery @Test public void simpleSubQueryTest() { QMember m = QMember.member; QTeam t = QTeam.team;..
-
[QueryDSL] select 절에서 조회 대상 지정 방법Java/JPA 2019. 7. 13. 22:33
QueryDSL을 이용하여 entity 전체를 가져오는 방법 말고, 조회 대상을 지정하여 원하는 값만 조회하는 것을 프로젝션이라고 합니다. 프로젝션 대상이 하나일 경우에는 반환되는 타입이 프로젝션 대상의 타입입니다. @Test public void oneProjectionTest() { QMember m = QMember.member; query.select(m.name) .from(m) .fetch() .stream() .forEach(name -> log.info("name is : " + name)); } 위의 결과를 보면 Member 엔티티의 name은 String 타입이므로 프로젝션 대상이 하나일 때, List 타입이 조회 결과로 반환되는 것을 볼 수 있습니다. 만약 두 개 이상일 경우에는 어떤..
-
JPA QueryDSL 시작해보기Java/JPA 2019. 7. 11. 22:41
회사에서 Criteria를 사용하다 보니 그동안 jpa를 사용하면서 복잡한 쿼리는 Criteria를 이용하여 작성하였습니다. 하지만 많은 회사들이 QueryDSL을 사용하고 있고, Criteria보다 더 직관적인 코드를 작성할 수 있다기에 QueryDSL에 대해서 공부해보려고 합니다. :) 우선 위와 같은 의존성을 설정하여 프로젝트를 생성하였습니다. 데이터베이스는 따로 구축하지 않고 편하게 테스트하기 위해 H2 Database를 이용하려고 합니다. application.yml spring: profiles: active: local # 기본 환경 선택 datasource: data: classpath:data-h2.sql # local 환경 --- spring: profiles: local jpa: sh..