반응형
봄:
데이터 소스:
URL: jdbc:h2:mem:testdb;NON_KEYWORDS=USER
봄:
데이터 소스:
URL: jdbc:h2:mem:testdb;NON_KEYWORDS=USER

원인

H2 데이터베이스 2.1.212 버전에서 user키워드가 예약어로 user 테이블 생성 불가

해결

properties.yml의 url에 **NON_KEYWORDS=USER 설정 추가

spring:
  datasource:
    url: jdbc:h2:mem:testdb;NON_KEYWORDS=USER
반응형

Spring Boot QueryDSL 초기 설정

Quesrydsl 을 사용하기 위해서는 SpringDataJPA도 추가해야 함

build.gradle 설정 추가

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	// H2 Database
	runtimeOnly 'com.h2database:h2'

	// QueryDSL
	implementation 'com.querydsl:querydsl-jpa:5.0.0'
	annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa"    // querydsl JPAAnnotationProcessor 사용 지정
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"	// java.lang.NoClassDefFoundError(javax.annotation.Entity) 발생 대응
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"		// java.lang.NoClassDefFoundError (javax.annotation.Generated) 발생 대응
	
}

/** clean 태스크 실행시 QClass 삭제 */
clean {
	delete file('src/main/generated') // 인텔리제이 Annotation processor 생성물 생성위치
}

IntelliJ에서 프로젝트 실행시, 엔티티 클래스 앞에 Q가 붙은 Q클래스가 생성이 되는데 이는 IntelliJ 설정에 따라 생성되는 위치가 다르다.

IntelliJ IDEA에서 빌드방식 선택(Gradle or IntelliJ IDEA에 따라 ‘Querydsl Annotation processor’ 가 생성하는 Q클래스의 위치가 달라지기 때문이다.

Gradle 로 설정시

  • Qclass 생성경로: build/generated/sources/annotationProcessor/java/main
  • Q클래스에 대한 별도 정리 작업 없이 Clean태스크로 정리 된다.

IntelliJ IDEA로 설정시

  • Qclass 생성경로: src/main/generated
  • Compiler Annotation procesoors 설정영향받음
  • 기존 생성된 Q클래스는 갱신되지만 엔티티 위치 변경이나 삭제된 경우 기존Q클래스는 그대로 유지된다
  • src/main/generated 폴더에 생성된 Q클래스 처리 태스크를 작성 해야 한다.

  • IntelliJ IDE 설정으로 사용시 github로 버전관리를 하면 generated 경로 파일이 올라가지 않도록 .gitignore에 추가해주도록 하자. (generated)

[참고자료]

https://gaemi606.tistory.com/entry/Spring-Boot-Querydsl-추가-Gradle-7x

http://honeymon.io/tech/2020/07/09/gradle-annotation-processor-with-querydsl.html

반응형

롬복(Lombok) 라이브러리를 사용하면 getter,setter,builder,constructor 코드를 프로젝트 컴파일 시 관련 코드를 자동으로 작성해준다. 코드의 양을 줄이고 개발시간을 단축시켜줌

1. IntelliJ에서 Preferences(⌘,) 창에서 Plugins → lombok 설치

2. 롬복 디펜던시 설정

builder.gradle 파일에 디펜던시 부분 추가

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

3. 어노테이션 프로세싱 설정

Gradle이 아닌 IntelliJ에서 인식하도록 어노테이션 프로세싱을 설정해 주자

Preferences(⌘,) → Build, Execution... → Compiler → Annotation Processors

상단의 Enable annotation processing 항목 체크박스에 체크해주자

4. 컴파일 테스트 확인

아래 코드를 작성하여 에러 없이 컴파일이 된다면 정상 셋팅 완료

package com.pmguda.demo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class DemoDTO {
    private String id;
}

어노테이션 설명

@Builder : 오브젝트 생성을 위한 디자인 패턴, Builder 패턴을 사용해 오브젝트 생성

DemoDTO dto = DemoDTO.builder().id("testId").build();

@NoArgsConstructor : 매개변수가 없는 생성자를 구현

@AllArgsConstructor : 클래스의 모든 멤버 변수를 매개변수로 받는 생성자 구현

@Data : 클래스의 멤버 변수의 Getter/Setter 메서드를 구현

+ Recent posts