작성
·
5.4K
0
이렇게 찾을 수 없다고 뜨는데 이유를 모르겠습니다
또한
위에 있는 코드로 했을 경우에는 QOrder 등 파일이 생성이 되는데 밑에있는 코드로 했을 경우는 generated 파일 자체가 생성이 안되고 완료했다는 코드만 뜹니다ㅠ
답변 9
1
다들 $buildDir 을 사용하라고 하는데 전 Cannot assign 'GString' 이렇게 뜨는데 이게 문제일까요...
이 코드로 했을 경우는 아에 generated 디렉토리가 생성 자체가 안돼요ㅜㅠㅠ
1
안녕하세요. 섭섭님
Querydsl이 설정이 버전업 마다 조금씩 달려져서 어려운 점이 있습니다.
다음을 참고해주세요.
https://www.inflearn.com/questions/355723
감사합니다.
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>
<!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>
올려주신 코드가 제 환경에서 정상작동하는 것으로 보아 다른 부분에서 발생하는 문제인 것 같습니다.
전체 코드를 봐야 알 것 같네요. 강의 코드를 따라하시다 발생한 문제라면,
제공해드리는 완성된 프로젝트 코드로 진행하시고, querydsl도 알려드려서 해결한 설정(코드)을 적용하시면 될 것 같습니다.
완성된 코드를 제공해드리는 이유가 강의중 진행한 코드 오타 등의 문제로 영한님과 서포터즈가 도움 드리기 힘든 점이 있어 제공해드리고 있습니다.
양해부탁드려요
섭섭님 안녕하세요. 이전 답변을 찾아보던 중 지금과 동일한 에러이지만 다른 상황에서 발생하는 것을 확인하였습니다.
아래 답변으로 해결될지는 모르겠지만 확인 부탁드립니다.
application.yml에 아래 설정이 있다면 지워주세요 :)
open-in-view: false
0
0
다른 코드로 하니까 검색이 됩니다!!!
근데 문제는 그 이후로 갑자기 orderList가 파싱하는 과정에서 에러가 뜹니다...ㅠㅠ아무것도 손댄거 없고 여태까지 잘 됐는데..
타임리프 태그에서 닫는 태그 전 줄바꿈 시 발생할 수 있는 문제입니다. 아래를 참고하여 줄바꿈 되어있는지 확인해주세요.
<여는태그> </닫는태그>
줄바꿈이 있으면 위와 같이 한줄로 맞춰주세요.
https://www.inflearn.com/questions/362231
줄바꿈이랑 확인했는데 어디서 문제가 일어나는지 잘 모르겠습니다!
코드는 캡쳐해서 다 올렸습니다ㅠㅠㅠ확인 부탁드립니다 감사합니다!
1. orderList.html
2. OrderController
3. OrderStatus
0
어제 저녁에 답변을 남겼는데 글이 안올라갔네요 -,-;
제가 해결한 방법을 설명드릴테니 시도해주세요
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 주석 처리 해제 후 실행확인
여기까지 진행 후 결과를 공유해주세요
Q파일의 물리적 위치를 찾으려면 build 하위에서 찾으면 됩니다.
src/java/genereated로 지정한게 아니여서 찾아보니 build directory 하위에 있더라구요.
0
강사님처럼 밑에 뜨는게 아니고 위에 저렇게 파일이 만들어지긴해서 했는데 이제는 no session이 뜨더라구요ㅠ
크리스마스이브인데 귀찮게 해드리고 있네요
도와주세요 사랑합니다
0
어제부터 계속 찾아보고 똑같이 해봤는데도 안되네요...
설명에 나와있는 것처럼 $buildDir로 된 코드로 만들면 generated는 아에 생성도 되지않아서 위 코드로만 해야하고 그렇게 했을 경우 Q파일들은 제대로 만들어지나 돌리면 결국 계속 cannot find symbol이라고 뜨네요..
답답ㅠ
이 코드로 테스트 해보시겠어요?