인프런 커뮤니티 질문&답변

조재연님의 프로필 이미지
조재연

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

QueryDSL 소개

강사님 QueryDSL이 안됩니다..

작성

·

6K

0

안녕하세요. 강사님

https://www.inflearn.com/questions/149157

여기 글이랑 같은 오류인데 강사님이 알려주신 링크 들어가니까 권한이 없다고 나오는데.. 방법을 모르겠습니다. ㅜ

답변 3

8

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 재연님

build.gradle을 다음과 같이 수정해주세요.

//querydsl 추가
buildscript {
dependencies {
classpath("gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.10")
}
}

plugins {
id 'org.springframework.boot' version '2.4.1'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
}

group = 'jpabook'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

//apply plugin: 'io.spring.dependency-management'
apply plugin: "com.ewerk.gradle.plugins.querydsl"

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-devtools'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'
// implementation 'org.hibernate:hibernate-core:5.4.13.Final'

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'

compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'

annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//추가
testImplementation("org.junit.vintage:junit-vintage-engine") {
exclude group: "org.hamcrest", module: "hamcrest-core"
}

//querydsl 추가
implementation 'com.querydsl:querydsl-jpa'
//querydsl 추가
implementation 'com.querydsl:querydsl-apt'
}


//querydsl 추가
//def querydslDir = 'src/main/generated'
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslDir
}

sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslDir]
}
}
}

compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}

configurations {
querydsl.extendsFrom compileClasspath
}

감사합니다.

조재연님의 프로필 이미지
조재연
질문자

감사합니다 !

1

김영한님의 프로필 이미지
김영한
지식공유자

조회한 Order 컬렉션에서 order.member가 없어서 발생하는 오류 같아요.

member가 null인지 확인해주세요.

감사합니다.

조재연님의 프로필 이미지
조재연
질문자

안녕하세요 강사님.

뒤에 더 오류가 있길래 확인해봤더니

org.hibernate.LazyInitializationException: could not initialize proxy [jpabook.jpashop.domain.Member#1]

이런 에러가 있더라구요. 그래서 확인해보니 OSVI가 작동하지 않을 때 발생하는 에러라고 해서 True로 바꿔서 해결을 했는데요.

--------------------------------------------------------------------------------------------

OSIV를 끄면 트랜잭션을 종료할 때 영속성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환한다. 따라서 커넥션 리소스를 낭비하지 않는다.

OSIV를 끄면 모든 지연로딩을 트랜잭션 안에서 처리해야 한다. 따라서 지금까지 작성한 많은 지연 로딩 코드를 트랜잭션 안으로 넣어야 하는 단점이 있다. 그리고 view template에서 지연로딩이 동작하지 않는다. 결론적으로 트랜잭션이 끝나기 전에 지연 로딩을 강제로 호출해 두어야 한다.

--------------------------------------------------------------------------------------------

지연 로딩 강제 호출을 안해서 에러가 발생한 걸까요..? 

감사합니다.

김영한님의 프로필 이미지
김영한
지식공유자

맞습니다^^!

OSIV를 키거나, 강제 로딩 하거나, fetch join을 사용하시면 됩니다.

조재연님의 프로필 이미지
조재연
질문자

감사합니다 !

0

조재연님의 프로필 이미지
조재연
질문자

안녕하세요. 강사님 강의 도중 질문이 있어서 문의드립니다.~

OrderRepository 랑 OrderService 수정 후에 주문 내역부분에 서 500에러가 발생합니다.

그래서 확인해보니 템플릿 파싱 에러라고 하는데 이런 경우에는 어디쪽을 살펴보면 괜찮을까요?

There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")
Exception processing template "order/orderList": An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")

감사합니다.

조재연님의 프로필 이미지
조재연

작성한 질문수

질문하기