首先,我是QueryDSL的新手.
我正在使用Spring + Hibernate环境.
我面临的问题是构建GenericDAO来实现所有基本的CRUD操作,但我不知道如何从QEntity获取静态引用.
我的实体类结构如下所示:
@Entity //jpa public class Entity extends AbstractEntity{ //fields ... } public abstract class AbstractEntity{ //Logger }
QueryDSL生成的实体的基本结构
public class QEntity extends PEntity{ ... public static final QEntity entity = new QEntity("entity"); ... //constructors }
GenericDao看起来像这样:
public class abstract GenericDao>{ //some kind of method to get the K.k (QEntity.entity) reference. //CRUD operations using T and K }
一种方法是使用Reflection,但我不是使用该方法的倡导者,尤其是在这种情况下.
另一件我不确定的事情是,是否必须使用QEntity中的静态引用来构建查询,或者如果我进行构造函数调用以获取新对象,则可以.另外,构造函数参数中的String表示什么?
public QEntity(String variable) { this(Entity.class, forVariable(variable), INITS); }
Timo Westkäm.. 8
我面临的问题是构建GenericDAO来实现所有基本的CRUD操作,但我不知道如何从QEntity获取静态引用.
如果没有QEntity类的引用则很难,所以请确保为DAO提供实例.
另一件我不确定的事情是,是否必须使用QEntity中的静态引用来构建查询,或者如果我进行构造函数调用以获取新对象,则可以.另外,构造函数参数中的String表示什么?
不,这不是强制性的,它是一个方便的例子.构造函数参数是变量名称.如果提供自定义实例,请确保始终使用相同的变量名称.
还要确保使用最新的Querydsl版本.PEntity看起来像2.0之前的类.
以下是Querydsl JPA用法的通用DAO超类的示例https://github.com/querydsl/querydsl/blob/master/querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl /example/jpa/repository/AbstractRepository.java
如果你想避免将Q-type传递给你的DAO类,你可以使用这样的模式https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org /springframework/data/jpa/repository/support/QueryDslRepositorySupport.java#L54
变量名称将是您实体类的简单名称,第一个字母转换为小写.