Java 如何使用QueryDSL构建GenericDao?

Java 如何使用QueryDSL构建GenericDao?,java,generics,jpa,dao,querydsl,Java,Generics,Jpa,Dao,Querydsl,首先,我对QueryDSL真的很陌生 我使用的是Spring+Hibernate环境 我面临的问题是构建一个GenericDAO来实现所有基本的CRUD操作,但我不确定如何从QEntity获取静态引用 我的实体类结构如下所示: @Entity //jpa public class Entity extends AbstractEntity{ //fields ... } public abstract class AbstractEntity{

首先,我对QueryDSL真的很陌生

我使用的是Spring+Hibernate环境

我面临的问题是构建一个GenericDAO来实现所有基本的CRUD操作,但我不确定如何从QEntity获取静态引用

我的实体类结构如下所示:

    @Entity //jpa
    public class Entity extends AbstractEntity{
    //fields
    ...
    }

    public abstract class AbstractEntity{
    //Logger 
    }
    public class abstract GenericDao<T extends AbstractEntity, K extends PEntity<? extends AbstractEntity>>{

    //some kind of method to get the K.k (QEntity.entity) reference.        
    //CRUD operations using T and K

    }
QueryDSL生成的实体的基本结构

    public class QEntity extends PEntity<Entity>{
    ...
    public static final QEntity entity = new QEntity("entity");        
    ...
    //constructors

    } 
我面临的问题是如何构建一个通用DAO来实现所有 基本CRUD操作,但我不确定如何获得静态 来自实体的引用

没有对QEntity类的引用是很困难的,因此请确保为DAO提供一个实例

我不确定的另一件事是,是否必须使用static 从QEntity引用以生成查询,或者如果我执行 构造函数调用以获取新对象。另外,字符串中的字符串是什么 构造函数参数表示什么

    public QEntity(String variable) {
    this(Entity.class, forVariable(variable), INITS);
    }
不,这不是强制性的,这是一个方便的例子。构造函数参数是变量名。如果提供自定义实例,请确保始终使用相同的变量名

还要确保使用最新的Querydsl版本。奔腾看起来像一个2.0之前的类

下面是一个用于Querydsl JPA的通用DAO超类示例

更新 如果您想避免将Q-type传递给DAO类,可以使用如下模式

变量名将是实体类的简单名称,第一个字母转换为小写。

正确链接