inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

queryDsl Cannot find symbol이라고 뜹니다

5720

섭섭

작성한 질문수 1

0

 

 

이렇게 찾을 수 없다고 뜨는데 이유를 모르겠습니다

 

또한 

 

위에 있는 코드로 했을 경우에는 QOrder 등 파일이 생성이 되는데 밑에있는 코드로 했을 경우는 generated 파일 자체가 생성이 안되고 완료했다는 코드만 뜹니다ㅠ

JPA spring-boot spring java

답변 9

1

섭섭

다들 $buildDir 을 사용하라고 하는데 전 Cannot assign 'GString' 이렇게 뜨는데 이게 문제일까요...

이 코드로 했을 경우는 아에 generated 디렉토리가 생성 자체가 안돼요ㅜㅠㅠ

1

김영한

안녕하세요. 섭섭님

Querydsl이 설정이 버전업 마다 조금씩 달려져서 어려운 점이 있습니다.

다음을 참고해주세요.

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

감사합니다.

0

OMG

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header"/>
<body>

<div class="container">

<div th:replace="fragments/bodyHeader :: bodyHeader"/>

<div>
<div>
<form th:object="${orderSearch}" class="form-inline">
<div class="form-group mb-2">
<input type="text" th:field="*{memberName}" class="form-control" placeholder="회원명"/>
</div>
<div class="form-group mx-sm-1 mb-2">
<select th:field="*{orderStatus}" class="form-control">
<option value="">주문상태</option>
<option th:each="status : ${T(jpabook.jpashop.domain.OrderStatus).values()}"
th:value="${status}"
th:text="${status}">option
</option>
</select>
</div>
<button type="submit" class="btn btn-primary mb-2">검색</button>
</form>
</div>

<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>회원명</th>
<th>대표상품 이름</th>
<th>대표상품 주문가격</th>
<th>대표상품 주문수량</th>
<th>상태</th>
<th>일시</th>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="item : ${orders}">
<td th:text="${item.id}"></td>
<td th:text="${item.member.name}"></td>
<td th:text="${item.orderItems[0].item.name}"></td>
<td th:text="${item.orderItems[0].orderPrice}"></td>
<td th:text="${item.orderItems[0].count}"></td>
<td th:text="${item.status}"></td>
<td th:text="${item.orderDate}"></td>
<td>
<a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'"
class="btn btn-danger">CANCEL</a>
</td>
</tr>

</tbody>
</table>
</div>

<div th:replace="fragments/footer :: footer"/>

</div> <!-- /container -->

</body>
<script>
function cancel(id) {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "/orders/" + id + "/cancel");
document.body.appendChild(form);
form.submit();
}
</script>
</html>

0

OMG

이 코드로 테스트 해보시겠어요?

0

섭섭

주신 코드로 했는데도 똑같은 오류가 뜨네요ㅠㅠㅠ

0

섭섭

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="fragments/header :: header"/>
<body>

<div class="container">

<div th:replace="fragments/bodyHeader :: bodyHeader"/>

<div>
<div>
<form th:object="${orderSearch}" class="form-inline">
<div class="form-group mb-2">
<input type="text" th:field="*{memberName}" class="form-control" placeholder="회원명"/>
</div>
<div class="form-group mx-sm-1 mb-2">
<select th:field="*{orderStatus}" class="form-control">
<option value="">주문상태</option>
<option th:each="status : ${T(jpabook.jpashop.domain.OrderStatus).values()}" th:value="${status}" th:text="${status}">option</option>
</select>
</div>
<button type="submit" class="btn btn-primary mb-2">검색</button>
</form>
</div>

<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>회원명</th>
<th>대표상품 이름</th>
<th>대표상품 주문가격</th>
<th>대표상품 주문수량</th>
<th>상태</th>
<th>일시</th>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="item : ${orders}">
<td th:text="${item.id}"></td>
<td th:text="${item.member.name}"></td>
<td th:text="${item.orderItems[0].item.name}"></td>
<td th:text="${item.orderItems[0].orderPrice}"></td>
<td th:text="${item.orderItems[0].count}"></td>
<td th:text="${item.status}"></td>
<td th:text="${item.orderDate}"></td>
<td>
<a th:if="${item.status.name() == 'ORDER'}" href="#" th:href="'javascript:cancel('+${item.id}+')'" class="btn btn-danger">CANCEL</a>
</td>
</tr>

</tbody>
</table>
</div>

<div th:replace="fragments/footer :: footer"/>

</div> <!-- /container -->

</body>
<script>
function cancel(id) {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "/orders/" + id + "/cancel");
document.body.appendChild(form);
form.submit();
}
</script>
</html>

0

섭섭

복사해서 붙여놓고 한줄로 맞춰도 똑같은 에러가 뜨네요ㅠㅠㅠ

0

OMG

올려주신 코드가 제 환경에서 정상작동하는 것으로 보아 다른 부분에서 발생하는 문제인 것 같습니다.

전체 코드를 봐야 알 것 같네요. 강의 코드를 따라하시다 발생한 문제라면,

제공해드리는 완성된 프로젝트 코드로 진행하시고, querydsl도 알려드려서 해결한 설정(코드)을 적용하시면 될 것 같습니다.

 

완성된 코드를 제공해드리는 이유가 강의중 진행한 코드 오타 등의 문제로 영한님과 서포터즈가 도움 드리기 힘든 점이 있어 제공해드리고 있습니다.

양해부탁드려요

 

 

 

0

섭섭

넵!!! 하나씩 비교해보면서 머가 문제인지 알아보겠습니다 감사합니다~!!!!!

0

OMG

원인을 발견하시게 되면 공유해주세요~^^

후에 동일한 에러가 발생하는 수강생분들에게 참고로 말씀드리면 큰 도움이 될 것같아서요 :)

0

OMG

섭섭님 안녕하세요.  이전 답변을 찾아보던 중 지금과 동일한 에러이지만 다른 상황에서 발생하는 것을 확인하였습니다.

아래 답변으로 해결될지는 모르겠지만 확인 부탁드립니다.

 

application.yml에 아래 설정이 있다면 지워주세요 :)

 open-in-view: false

0

섭섭

와우....이게 문제였네요....충격...감사합니다..!!!!

0

OMG

 

 

option과 a 태그를 한줄로 해주세요

 

그래도 안될 경우, orderlist.html 코드를 복사 가능하도록 텍스트로 올려주시면 확인해보겠습니다.

 

0

섭섭

알려주신 코드대로 해보니까 이렇게 뜨네요..

 

0

섭섭

다른 코드로 하니까 검색이 됩니다!!!

근데 문제는 그 이후로 갑자기 orderList가 파싱하는 과정에서 에러가 뜹니다...ㅠㅠ아무것도 손댄거 없고 여태까지 잘 됐는데..

0

OMG

타임리프 태그에서 닫는 태그 전 줄바꿈 시 발생할 수 있는 문제입니다. 아래를 참고하여 줄바꿈 되어있는지 확인해주세요.

<여는태그> </닫는태그> 

줄바꿈이 있으면 위와 같이 한줄로 맞춰주세요.

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

0

섭섭

줄바꿈이랑 확인했는데 어디서 문제가 일어나는지 잘 모르겠습니다!

코드는 캡쳐해서 다 올렸습니다ㅠㅠㅠ확인 부탁드립니다 감사합니다!

 

 

1. orderList.html

 

 

2. OrderController

 

 

 

 

3. OrderStatus

 

 

 

 

 

 

 

 

0

OMG

어제 저녁에 답변을 남겼는데 글이 안올라갔네요 -,-;

제가 해결한 방법을 설명드릴테니 시도해주세요

 

0. 개발환경(자바11, 인텔리제이 얼티메이트(유료) 2021.1.2)

1. 동일한 프로젝트로 진행하기 위해 강의에서 제공해드리는 완성된 프로젝트 코드로 진행해주세요.(다운로드 및 실행 해주세요)

2.  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 = "$buildDir/generated/querydsl"

querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
querydsl.extendsFrom compileClasspath
}
//querydsl 추가 끝

3.  compileQuerydsl을 클릭

4. 인텔리제이에서 shift 2번 클릭하여 QOrder 검색(All) 하여 검색되는지 확인

5. application.yml 주석 처리 해제 후 실행확인

 

여기까지 진행 후 결과를 공유해주세요

0

OMG

Q파일의 물리적 위치를 찾으려면 build 하위에서 찾으면 됩니다.

src/java/genereated로 지정한게 아니여서 찾아보니 build directory 하위에 있더라구요.

0

섭섭

 

강사님처럼 밑에 뜨는게 아니고 위에 저렇게 파일이 만들어지긴해서 했는데 이제는 no session이 뜨더라구요ㅠ

크리스마스이브인데 귀찮게 해드리고 있네요

도와주세요 사랑합니다

 

0

OMG

안녕하세요. 섭섭님, 공식 서포터즈 OMG입니다.

올리신 이미지 우측에 보면 코끼리 버튼이 활성화 되어있습니다.

클릭하여 reload 해주세요.


감사합니다.

0

섭섭

어제부터 계속 찾아보고 똑같이 해봤는데도 안되네요...

설명에 나와있는 것처럼 $buildDir로 된 코드로 만들면 generated는 아에 생성도 되지않아서 위 코드로만 해야하고 그렇게 했을 경우 Q파일들은 제대로 만들어지나 돌리면 결국 계속 cannot find symbol이라고 뜨네요..

답답ㅠ

 

강의 관련 외 질문입니다.

0

75

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

1

95

1

BeanCreationException

0

94

3

Update 후 UpdateMemberResponse 매핑할 때

0

53

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

102

2

페이징 + 검색조건 관련해서 질문드립니다.

0

74

1

Query Dsl Q파일 질문입니다.

0

86

1

루트 쿼리라는것은

0

62

1

메서드를 분리하는 기준

0

70

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

115

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

90

2

fetch join과 영속화와 OSIV의 관계

0

90

2

Distinct 사용 전 결과에 대한 의문

0

117

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

61

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

79

2

dto 필드 속 엔티티 여부

0

61

1

뷰템플릿 사용 시

0

82

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

87

1

DTO 대신 Form 사용은 안되나요?

0

140

1

OSIV ON 상태일 때

0

98

1

fetch join VS fetch join 페이징 궁금증

0

189

2

양방향 연관관계 알아보는 법?

0

108

1

16강 17강 간단 정리 이게 맞을까요 ?

0

167

2