[英]How do I build a GenericDao using QueryDSL?
首先,我是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<Entity>{
...
public static final QEntity entity = new QEntity("entity");
...
//constructors
}
GenericDao看起來像這樣:
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
}
一種方法是使用Reflection,但我不是使用該方法的倡導者,尤其是在這種情況下。
另一件我不確定的事情是,是否必須使用QEntity中的靜態引用來構建查詢,或者如果我執行構造函數調用以獲取新對象,則可以。 另外,構造函數參數中的String表示什么?
public QEntity(String variable) {
this(Entity.class, forVariable(variable), INITS);
}
我面臨的問題是構建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
變量名稱將是您實體類的簡單名稱,第一個字母轉換為小寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.