Search code examples
spring-bootmavenjpqlquerydsl

Type error when generating Q Classes for QueryDsl


type com.org.entity.Class does not take parameters

Getting this error while generating Q Classes

public QStudent(Class<? extends Student> type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.className = inits.isInitialized("className") ? new QClass(forProperty("className")) : null; this.section = inits.isInitialized("section") ? new QSection(forProperty("section")) : null; }

this is the generated code showing error in QStudent.java and 5 other Q classes

Following is class.java

`package com.xendworks.manage.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xendworks.manage.utils.annotations.DisplayName;
import com.xendworks.manage.utils.annotations.PluralName;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "Class")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@PluralName("classes")
public class Class extends EntityBase {

    @Column(name = "class_name", nullable = false)
    @NotNull
    @DisplayName("Name")
    private String name;

    @Column(name = "class_code")
    @DisplayName("Class Code")
    private String classCode;

    @JsonIgnore
    @ManyToMany(mappedBy = "mappedClasses")
    @DisplayName("Class Group")
    private Set<ClassGroup> classGroupSet = new HashSet<>();

    @ManyToMany
    @JoinTable(
            name = "class_section",
            joinColumns = @JoinColumn(name = "class_id"),
            inverseJoinColumns = @JoinColumn(name = "section_id")
    )
    @DisplayName("Sections")
    private Set<Section> mappedSections = new HashSet<>();

}`

Following is the department entity

`@Entity
@Table(name = "Department")
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@PluralName("departments")
public class Department extends EntityBase {

    @Column(name = "dept_name")
    @DisplayName("Name")
    @NotNull
    private String name;

    @Column(name = "dept_desc")
    @DisplayName("Description")
    @PartialField
    private String deptDesc;

//    @OneToOne
//    @JoinColumn(name = "fk_dept_head", nullable = true)
//    @DisplayName("Head of department")
//    private Employee department_head;

    @JsonBackReference
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "fk_dept_id", referencedColumnName = "id")
    @DisplayName("Employees")
    private Set<Employee> employee;

    @ManyToMany
    @JoinTable(
            name = "department_courses",
            joinColumns = @JoinColumn(name = "dept_id"),
            inverseJoinColumns = @JoinColumn(name = "course_id")
    )
    @DisplayName("Courses")
    private Set<Course> mappedCourses = new HashSet<>();

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
        Department dept = (Department) o;
        return id != null && Objects.equals(id, dept.id);
    }

    @Override
    public int hashCode() {
        return getClass().hashCode();
    }
}`

When i remove @OneToOne field in department entity error for QDepartment.java is resolved

Following is the pom.xml i use in my project

`<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.2</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xendworks</groupId>
    <artifactId>manage</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Xend Manage</name>
    <description>Xend manage</description>
    <properties>
        <java.version>17</java.version>
        <maven.compiler.release>17</maven.compiler.release>
        <nimbusds.version>8.19</nimbusds.version>
        <querydsl.version>5.0.0.M1</querydsl.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <!-- Needed for Async Logging with Log4j 2 -->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.4.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.17.1</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>6.1.7.Final</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>com.nimbusds</groupId>
            <artifactId>oauth2-oidc-sdk</artifactId>
            <version>${nimbusds.version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>${querydsl.version}</version>
            <classifier>jakarta</classifier>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
            <classifier>jakarta</classifier>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-core</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
        <dependency>
            <groupId>jakarta.persistence</groupId>
            <artifactId>jakarta.persistence-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>2.1.1</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>`

This error occurs only for the 5 entities. I'm able to solve these errors if i remove the fields with @ManyToOne and @OneToOne annotations `

i suspect that this has to do with the jakarta annotation processing


Solution

  • This issue was due to using the Keyword Class for my entity. Changing that fixed my issue