코틀린을 스프링 부트 프로젝트를 사용할 때 QueryDSL을 사용할 떄 2.x 와 조금 다른 부분이 있어 정리합니다. ▼ QueryDSL 플러그인 설정을 해줍니다. plugins { id("org.springframework.boot") version "3.0.6" id("io.spring.dependency-management") version "1.1.0" kotlin("jvm") version "1.7.22" kotlin("plugin.spring") version "1.7.22" // querydsl kotlin("plugin.jpa") version "1.8.21" kotlin("plugin.allopen") version "1.8.21" kotlin("kapt") version "1.8.21"..
집합함수 집합함수는 다음과 같은 특징이 있습니다. 집합함수는 값을 계산해서 하나의 값으로 반환하는 함수입니다. 보통 group by 자주 같이 사용됩니다. where 절에서 바로 사용할 수 없기 때문에 group by 이후에 having 또는 서브쿼리를 사용합니다. 함수 리턴타입 설명 count Long 개수를 구함 max, min Long 최대, 최소값 구함 avg Double 평균 구함 sum Long 합 구함 ▼ 예제의 Player 엔티티는 Team 엔티티와 관계하고 있습니다. ▼ max, min, avg, sum은 해당 값이 존재하지 않는 경우 null을 값으로 리턴합니다. 다음과 같이 TypedQuery를 생성해서 getSingleResult() 메서드를 실행하면 각각 salary의 평균과 최고..
기본 생성자 인자를 가진 생성자가 필요하다면 반드시 기본 생성자도 함께 정의해야 한다. 기본 생성자의 접근 범위는 public 이나 protected이어야 한다. private일 경우 JPA의 특정 기능이 올바르게 동작하지 않을 수도 있다. 클래스 타입 엔티티는 클래스여야 한다. 인터페이스나 열거 타입으로는 엔티티 생성 불가 final 엔티티 클래스나 영속대상 필드는 final이면 안된다. EntityManager의 엔티티 관련 기본 기능 (find, persist, remove …) find() 메서드 entityManager의 find 메서드를 통해서 엔티티를 가져온다. 메서드의 첫번째 파라미터는 엔티티 클래스이며 두번째 파라미터는 키 값을 의미한다. getReference() 메서드 find() 메..
@Table @Table 어노테이션에는 catalog와 scheme 속성도 있다. catalog - 테이블의 카달로그를 지정한다. MySQL의 데이터베이스가 카달로그에 해당한다 schema - 테이블의 스키마를 설정한다. 오라클의 스키마 지정 @Basic JPA는 영속 대상 필드 (또는 자바빈 프로퍼티)가 int, long, String과 같은 기본 타입일 때 @Basic 애노테이션을 사용한다. int, long, double 등 자바 기본 데이터 타입 Integer, Long, Double등 기본 데이터 타입에 대응하는 래퍼 타입 java.math.BigInteger, java.math.BigDecimal java.lang.String java.util.Date, java.util.Calendar ja..
JPA를 사용하면서 JQPL 로 쿼리를 작성했는데 다음과 같은 에러 문제를 겪었습니다. GROUP BY 명령을 실행할 때 MySQL 5.7 이상 버전 부터는 sql_mode 옵션을 변경해줘야 합니다. GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 오래된 데이터베이스에서는 문제없이 동작하는 코드 였는데 새로운 MySQL 을 도커로 설치하고 실행하니 문제가 되어서 찾아보았습니다. only_full_group_by 옵션을 비활성화 하는 방법은 다음과 같습니다. 관리자 권한으로 로그인 한뒤에 mysql 에서 다음과 같이 입력해서 only_full_group_by 옵션을 꺼주면 됩니다. 참고로 MySQL 뿐만아니라 MariaDB에서도..
Spring Boot에서 JPA를 사용하면 다양한 데이터베이스를 연결할 수 있습니다. 평소 개발할 때는 H2로 연결해서 개발할 수도 있고 실제 배포에는 오라클이나 MySQL을 이용할 수도 있습니다. MySQL 커뮤니티 버전이 아닌 MariaDB 오픈소스도 MySQL과 사용법은 비슷하지만 JPA 연결 시 드라이버(driver) 설정이 다릅니다. 오늘은 각각 많이 사용하는 MySQL과 MariaDB의 연결 설정에 대해서 알아보겠습니다. MVN Repository 사용시 이미 만들어진 프로젝트에 드라이버와 JPA를 설치하려면 MVN 레파지토리 사이트에서 검색한 후에 그래들 파일에 추가하는 것이 편리합니다. ▼ 우선 https://mvnrepository.com 사이트에서 필요한 드라이버를 검색해보겠습니다. 검..
Unresolved database references in annotations 설정 ▼ 인텔리제이(IntelliJ)를 사용해서 JPA를 쓰다보면 다음과 같이 Column 이나 테이블 명을 변경할 경우 텍스트에 경고표시를 볼 수 있습니다. 그냥 사용해도 빌드도 되고 문제는 없지만 조금 보기 좋게 출력하기 위해서 설정을 변경해 줄 수 있습니다. ▼ 다음과 같은 경로로 해당 옵션을 꺼줍니다. File > Settings > Editor > Inspections > JPA > Unresolved database reference in annotations ▼ 이렇게 옵션을 꺼주면 다음과 같이 해당 테이블 명이 녹색으로 잘 표시됩니다. 아주 간단한 것이지만 테이블 이름을 똑같이 쓰지 않을 경우 경고가 뜨는 것..