APT-based source code generation tool for Querydsl that generates type-safe query classes from annotated Java entity classes.
npx @tessl/cli install tessl/maven-com-mysema-querydsl--querydsl-apt@3.7.0Querydsl APT (Annotation Processing Tool) is a compile-time source code generation library that creates type-safe query classes (Q-classes) from annotated Java entity classes. It processes annotations from multiple persistence frameworks including JPA, Hibernate, JDO, Morphia (MongoDB), and Spring Roo to generate query domain models for the Querydsl type-safe query framework.
com.mysema.querydsl:querydsl-apt:3.7.4 (Maven dependency)// For general Querydsl annotations
import com.mysema.query.apt.QuerydslAnnotationProcessor;
// For JPA entities
import com.mysema.query.apt.jpa.JPAAnnotationProcessor;
// For configuration
import com.mysema.query.apt.Configuration;
import com.mysema.query.apt.DefaultConfiguration;The annotation processors are automatically discovered through the Java service provider interface. Add the appropriate processor to your build configuration:
Maven Configuration:
<!-- Maven APT plugin configuration -->
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources</outputDirectory>
<processors>
<processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
</processors>
</configuration>
</execution>
</executions>
</plugin>Gradle Configuration:
dependencies {
annotationProcessor 'com.mysema.querydsl:querydsl-apt:3.7.4'
compileOnly 'com.mysema.querydsl:querydsl-apt:3.7.4'
implementation 'com.mysema.querydsl:querydsl-core:3.7.4'
}
compileJava {
options.annotationProcessorPath = configurations.annotationProcessor
}For JPA entities:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String name;
private String email;
}
// APT generates QUser.java:
// public class QUser extends EntityPathBase<User> {
// public static final QUser user = new QUser("user");
// public final NumberPath<Long> id = createNumber("id", Long.class);
// public final StringPath name = createString("name");
// public final StringPath email = createString("email");
// }Querydsl APT uses a multi-phase annotation processing architecture:
The processing flow: Annotation Discovery → Entity Model Creation → Property Analysis → Code Generation → Source File Writing
Central annotation processing functionality providing the base framework for generating type-safe query classes from annotated entities.
public abstract class AbstractQuerydslProcessor extends AbstractProcessor {
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv);
protected abstract Configuration createConfiguration(RoundEnvironment roundEnv);
}
public class QuerydslAnnotationProcessor extends AbstractQuerydslProcessor {
// Handles @QueryEntity, @QuerySupertype, @QueryEmbeddable, @QueryEmbedded, @QueryTransient
}Specialized annotation processors for different persistence frameworks, each handling framework-specific annotations and conventions.
public class JPAAnnotationProcessor extends AbstractQuerydslProcessor {
// Handles @Entity, @MappedSuperclass, @Embeddable, @Embedded, @Transient
}
public class HibernateAnnotationProcessor extends JPAAnnotationProcessor {
// Extends JPA support with Hibernate-specific annotations
}
public class JDOAnnotationProcessor extends AbstractQuerydslProcessor {
// Handles @PersistenceCapable, @EmbeddedOnly, @NotPersistent
}
public class MorphiaAnnotationProcessor extends AbstractQuerydslProcessor {
// Handles MongoDB Morphia annotations: @Entity, @Embedded, @Transient
}
public class RooAnnotationProcessor extends AbstractQuerydslProcessor {
// Handles Spring Roo annotations: @RooJpaEntity, @RooJpaActiveRecord
}Comprehensive configuration system for customizing annotation processing behavior, code generation options, and framework-specific settings.
public interface Configuration {
TypeMappings getTypeMappings();
Class<? extends Annotation> getEntityAnnotation();
boolean isUseFields();
boolean isUseGetters();
String getNamePrefix();
String getNameSuffix();
void addExcludedPackage(String packageName);
void addExcludedClass(String className);
}
public class DefaultConfiguration implements Configuration {
public DefaultConfiguration(RoundEnvironment roundEnv, Map<String,String> options, ...);
public void setNamePrefix(String namePrefix);
public void setNameSuffix(String nameSuffix);
public <T> void addCustomType(Class<T> type, Class<? extends Expression<T>> queryType);
}APT compiler options for controlling code generation behavior, naming conventions, and processing rules.
public final class APTOptions {
public static final String QUERYDSL_PREFIX = "querydsl.prefix";
public static final String QUERYDSL_SUFFIX = "querydsl.suffix";
public static final String QUERYDSL_PACKAGE_SUFFIX = "querydsl.packageSuffix";
public static final String QUERYDSL_USE_FIELDS = "querydsl.useFields";
public static final String QUERYDSL_USE_GETTERS = "querydsl.useGetters";
public static final String QUERYDSL_EXCLUDED_PACKAGES = "querydsl.excludedPackages";
public static final String QUERYDSL_EXCLUDED_CLASSES = "querydsl.excludedClasses";
}public class APTException extends RuntimeException {
public APTException(String msg);
public APTException(String msg, Throwable t);
public APTException(Throwable t);
}
public class UnsupportedTypeException extends APTException {
public UnsupportedTypeException(TypeMirror mirror);
}Exception Hierarchy:
APTException extends RuntimeException - base exception for APT processing errorsUnsupportedTypeException extends APTException - thrown for unsupported type scenariosCommon processing errors include:
APTExceptionUnsupportedTypeExceptionAPTExceptionAPTException