gpt4 book ai didi

java - 如何使用 QueryDSL 构建 GenericDao?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:43 24 4
gpt4 key购买 nike

首先,我是 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

}

一种方法是使用反射,但我不提倡使用该方法,尤其是在这种情况下。

我不确定的另一件事是,是否必须使用 QEntity 中的静态引用来构建查询,或者如果我执行构造函数调用以获取新对象是否可以。另外,构造函数参数中的String是什么意思?

    public QEntity(String variable) {
this(Entity.class, forVariable(variable), INITS);
}

最佳答案

The problem I'm facing is with building a GenericDAO to implement allthe basic CRUD operations, but I'm not sure how do I get the staticreference from a QEntity.

如果没有对 QEntity 类的引用,这是很困难的,因此请确保向您的 DAO 提供它的实例。

Another thing that I'm not sure of, is it mandatory to use the staticreference from a QEntity to build queries or is it ok if I do acontructor call to get a new object. Also, what does the String in theconstructor parameter signify?

不,这不是强制性的,它是一个方便的实例。构造函数参数是变量名。如果您提供自定义实例,请确保始终使用相同的变量名称。

还要确保您使用最新的 Querydsl 版本。 PEntity 看起来像 pre-2.0 类。

这是用于 Querydsl JPA 用法的通用 DAO 父类(super class)的示例 https://github.com/querydsl/querydsl/blob/master/querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl/example/jpa/repository/AbstractRepository.java

更新

如果您想避免将 Q 类型传递给您的 DAO 类,您可以使用这样的模式 https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/repository/support/QueryDslRepositorySupport.java#L54

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

关于java - 如何使用 QueryDSL 构建 GenericDao?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21329658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com