Java 如何使用QueryDSL构建GenericDao?
首先,我对QueryDSL真的很陌生 我使用的是Spring+Hibernate环境 我面临的问题是构建一个GenericDAO来实现所有基本的CRUD操作,但我不确定如何从QEntity获取静态引用 我的实体类结构如下所示: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{
@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类,可以使用如下模式
变量名将是实体类的简单名称,第一个字母转换为小写。正确链接