问题标签 [querydsl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 QueryDSL 中使用 CollectionExpression
在 QueryDSL 库中,com.mysema.query.types.expr.SimpleExpression<T>
该类有一个SimpleExpression.in(CollectionExpression<?, ? extends T>)
方法,该方法应该采用一个应该返回集合的表达式。但我找不到创建类型对象的方法com.mysema.query.types.CollectionExpression<?, ? extends T>
。
我的查询表达式如下所示:
我希望expression
是这样的:
但是第二个表达式是类型的com.mysema.query.types.expr.BooleanExpression
,我无法找到将其转换为com.mysema.query.types.CollectionExpression<?, ? extends T>
.
我查看了QueryDSL API 文档,但找不到任何相关内容。
java - 比较 Querydsl、jOOQ、JEQUEL、activejdbc、iciql 和其他查询 DSL
有人可以指出一些关于可用于 Java 的不同 Query DSL 库之间性能比较的资源,例如:Querydsl、jOOQ、JEQUEL、activejdbc、iciql等...
背景:我正在使用 Spring JDBC 模板,但这仍然需要以纯字符串格式编写查询。虽然我在编写直接查询时没有问题,但我担心直接依赖于数据库表名。我不想使用任何 ORM 框架,如 Hibernate 或 JPA/EclipseLink。我需要尽可能高的原始性能(IMO,它们适用于更多以 CRUD 为中心的应用程序)。我可以为这些 DSL 提供一点点开销(我相信,它主要是 StringBuilder/String 连接!)
我考虑过在某些 xml 中使用外部化的命名查询。但只是试图评估不同 Query DSL 库提供的价值。
编辑:更多关于我的要求: 我想知道在使用他们的 API 方法构建一个中等复杂的查询时它们之间的性能比较。我只需要使用这些查询 DSL 库中的任何一个生成查询字符串,并将其传递给 Spring JDBC 模板。所以,我想知道添加这个中间步骤是否会导致相当大的性能损失,我想使用命名查询或构建我自己的库,它只使用 StingBuilder 或类似方法
更新我对 jOOQ、iciql、QueryDSL 的体验:
尽管我在原来的帖子中没有提到这一点,但我也热衷于易用性和我需要在我的实体类中拥有的开销(比如是否需要任何额外的注释或实现)。
约克:
- 需要将实体属性更改为库特定的方式
- 可以返回 SQL 查询字符串
爱奇艺:
- 实体可以在没有或很少更改的情况下进行映射(可以使用总共 3 种方式进行映射)
- 但它仅限于选择查询(对于更新/删除/...需要再次更改实体)
查询DSL:
- 将实体与表绑定的多种方法(除了库特定的方法,支持使用 JPA 注释)。但我们至少需要修改实体
- 没有简单/直接的方法来获取查询字符串
(所有观察结果我对这些知之甚少;如果其中任何一个不正确,请更正)
综上所述,我坚持编写命名查询:(但正如 Lukas Eder 的回答似乎解释了我最初关注的帖子(性能),我接受了他的。
jpa - QueryDSL:查询关系和属性
我将 QueryDSL 与 JPA 一起使用。
我想查询一个实体的一些属性,是这样的:
它工作正常。
如果我想查询关系属性,例如帖子的评论:
这也很好。
但是当我想一起查询关系和简单属性时,例如
然后出现了问题,产生了错误的 SQL 语法。
然后我意识到不可能在一个 SQL 语句中同时查询它们。
QueryDSL 是否有可能以某种方式处理关系并生成额外的查询(就像 hibernate 对惰性关系所做的那样)并加载结果?
或者我应该只查询两次,然后合并两个结果列表?
PS我真正想要的是每个帖子都有评论的ID。所以连接每个帖子的评论ID的功能更好,这种表达可能吗?
并生成一个子查询sql(select group_concat(c.id) from comments as c inner join post where c.id = post.id)
playframework - QueryDSL 和 Play 框架
我使用 QueryDSL 和 JPA2 有一段时间了,它是我所知道的最强大的 ORM 组合。JPA Criteria API 是一场灾难。使用 QueryDSL,我也忘记了 JPQL。
我想在 Play 中使用 QueryDSL!除了 JPQL 的内联部分作为字符串之外,Play 中的所有内容看起来都非常好。它让我想起了 CakePHP ......
我想在 Play 中使用防重构查询语言(以及其他一些东西 :))。
QueryDSL 的使用很简单。它只需要 EntityManager。但是 QueryDSL 有这个 APT 类生成器(就像来自 Hibernate 的 citeria API 一样)。
有没有人设法让这个类生成器与 Play 一起工作?是否可以重新创建和热重新加载这些类?
java - 如何在 QueryDSL 中创建常量数值表达式?
我想用 QueryDSL 创建这样的查询
我试过这样
但这不起作用 - 表达式没有减法。
我是这样做的:
但我想知道如何以第一种方式做到这一点。
//编辑
第二种方法不起作用:
JPAUpdateClause.toString 说:
但 SQL 结果是
括号就消失了。难道我做错了什么?它看起来像这些:
有相同的结果。
针对上述问题
作品。但我认为有一个错误。
jpa - QueryDsl Intellisense / Netbeans 问题
我从我的库中的 all 目录中引用了所有 QueryDSL jar。我的问题 NetBeans 没有看到“Q”对象。它们生成到与所有其他带有“_”的 JPA 实体对象相同的目录中。其次,如果我使用“Q”对象,它会编译,但编辑器本身看不到它并认为这是一个错误。
有人有想法么?我尝试编辑 Ant 文件,但也失败了。看来我不需要专门为生成编辑它。主要问题似乎是链接到 NetBeans 编辑器。
顺便说一句,我确实看过这个链接,我已经这样做了!如何在 Netbeans 中设置类路径?
我在 Mac OSX 和 Ubuntu Netbeans 上也有这个问题。帮助表示赞赏!
java - Maven 使用 spring-data-jpa 和 querydsl 构建问题
我有一个用于 spring-data-jpa 和 QueryDsl 的 Eclipse Maven 项目。
我似乎对 maven-apt-plugin 有问题,如果我先执行 mvn clean,然后执行 mvn install,它会尝试“处理”引用 QueryDsl 生成文件的文件,但这些生成的文件尚未构建,所以我收到多个“找不到符号”错误。
如果然后必须进行另一个 mvn 安装,一切都很好,因为生成的文件现在存在。
这个 maven-apt-plugin 是否需要处理我项目中的每个文件,或者我可以给它一个指定的目录?
注意:我使用 JDK6、Eclipse Indigo、M2E 1.0.100
我的POM是:
java - 为 QueryDSL 输出自定义包
我正在使用 Maven 为 MongoDB 创建 QueryDSL 对象,这是构建 xml,
但它在同一个包中生成查询类QDomain
。Domain
Domain
可以自定义插件以将查询类放在单独的包中吗?
java - ManyToMany的QueryDSL代码生成
我正在一个大型 Hibernate/JPA2 应用程序中移植一些复杂的 JPQL 查询以使用 QueryDSL 2.3.0,但我被困在了一个。
我的Client
实体包含
我现有的查询片段是
QueryDSL 代码生成在我的QClient
课堂上产生了以下内容:
using 的代码生成SimplePath
不允许我使用in
orcontains
方法来查询成员资格。我想我需要一个CollectionPath
。有没有办法对Client
类进行注释,以便 QueryDSL 使用正确的类型来查询集合?
java - 我可以删除 Hibernate 单表继承中的鉴别器列吗?
我们对应用程序中的每个表都使用单表继承。这允许同一应用程序堆栈的不同实例与相同的 DAO 一起工作,而它们的实体可能略有不同,可能包含该实例独有的信息。如果实例需要,抽象类定义基本表结构,扩展定义附加列:
应用 A:
应用 B:
现在,DAO 可以处理Client
应用程序 A 和 B 的对象,但应用程序 B 可以为其客户端对象定义附加信息,这些信息可由应用程序 B 独有的管理器方法读取:
应用 A:
应用 B:
不幸的是,这意味着每个表中都有一个 DTYPE 列(或我可能选择的任何其他名称)。有没有办法摆脱这个?我们不需要它,它正在占用数据库空间......
谢谢!
编辑
需要注意的重要一点:@MappedSuperclass
不起作用。我们使用QueryDSL作为我们的 HQL 抽象层。这需要为类型保存查询自动生成查询类型类。然而,这些只有在抽象类被注释时才能正确生成@Entity
。
这是必需的,因为我们想查询抽象类Client
,而实际上ClientSimple
在应用程序 A 和ClientAdvanced
应用程序 B 中查询:
因此,在任何应用程序中,这都会起作用:
在应用程序 B 中,这将起作用:
EDIT2 - 归结为
似乎可以归结为:我可以在部署时配置休眠以将继承实体的鉴别器类型设置为固定值。因此,以我的示例为例,aClient
将始终ClientSimple
在一个应用程序中,而在另一个应用程序ClientAdvanced
中,这样我就不必将该信息存储在数据库中?
就像我说的:每个应用程序都是基础应用程序堆栈的一个实例。每个应用程序可能会为其本地数据库定义额外的列,但所有对象都将属于该实例的相同类型,因此我们保证鉴别器始终相同,使其在数据库中成为冗余,并且是休眠配置的用例。