JesmanX
JesmanX

Reputation: 1

Querydsl does not generate Q-class using gradle

Feedback.java:

package org.sglnu.feedbackservice.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import org.springframework.data.jpa.domain.support.AuditingEntityListener;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "feedback")
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Feedback {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    private Long eventId;
    private String content;

}

FeedbackResponse.java:

package org.sglnu.feedbackservice.dto;

import com.querydsl.core.annotations.QueryEntity;

@QueryEntity
public record FeedbackResponse(Long id, Long userId, Long eventId, String content) {
}

FeedbackController.java

package org.sglnu.feedbackservice.controller;

import com.querydsl.core.types.Predicate;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.sglnu.feedbackservice.dto.FeedbackRequest;
import org.sglnu.feedbackservice.dto.FeedbackResponse;
import org.sglnu.feedbackservice.service.FeedbackService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/feedbacks")
@RequiredArgsConstructor
@Tag(name = "Feedback Controller", description = "Feedback API")
public class FeedbackController {

    private final FeedbackService feedbackService;

    @GetMapping
    public Page<FeedbackResponse> findAll(Pageable pageable, Predicate filter) {
        return feedbackService.findAll(pageable, filter);
    }

    @GetMapping("/{feedbackId}")
    @ResponseStatus(HttpStatus.OK)
    public FeedbackResponse findByFeedbackId(@PathVariable Long feedbackId) {
        return feedbackService.findByFeebackId(feedbackId);
    }

    @GetMapping("/users/{userId}")
    @ResponseStatus(HttpStatus.OK)
    public FeedbackResponse findByUserId(@PathVariable Long userId) {
        return feedbackService.findByUserId(userId);
    }

    @PostMapping("/leave-feedbacks")
    @ResponseStatus(HttpStatus.CREATED)
    public FeedbackResponse leaveFeedback(@RequestBody FeedbackRequest feedbackRequest) {
        return feedbackService.saveFeedback(feedbackRequest);
    }

}

build.gradle(feedback-service)

buildscript {
    ext {
        springCloudVersion = "2023.0.1"
        queryDslVersion = '5.1.0'
        mapStructVersion = '1.5.5.Final'
        springCloudVersion = '2023.0.1'
    }
}

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.4'
    id 'io.spring.dependency-management' version '1.1.4'
}

repositories {
    mavenCentral()
}

group = 'org.sglnu'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '21'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'
    implementation 'org.flywaydb:flyway-core'

    implementation "org.mapstruct:mapstruct:${mapStructVersion}"
    implementation "com.querydsl:querydsl-core:${queryDslVersion}"
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta"

    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.postgresql:postgresql'

    annotationProcessor 'org.projectlombok:lombok'
    annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapStructVersion}"
    annotationProcessor(
            "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta",
            "jakarta.persistence:jakarta.persistence-api:3.1.0"
    )

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

bootJar{
    mainClass = 'org.sglnu.categoryservice.CategoryServiceApplication'
}

Problem: When I send GET request to get all feedbacks I get error java.lang.ClassNotFoundException: org.sglnu.feedbackservice.dto.QFeedbackResponse, but when I send GET request to get for example feedback with id=1 I get OK response(FeedbackResponse).

I don't know how to resolve it. AIs say that the problem is with annotation processing but nothing has changed. I used the same build.gradle in other microservices and everything was ok.

I don't know how to resolve it. AIs say that the problem is with annotation processing but nothing has changed. I used the same build.gradle in other microservices and everything was ok.

Upvotes: 0

Views: 27

Answers (0)

Related Questions