gpt4 book ai didi

jpa - QueryDSL:查询关系和属性

转载 作者:行者123 更新时间:2023-12-01 14:08:47 24 4
gpt4 key购买 nike

我将 QueryDSL 与 JPA 结合使用。

我想查询一个实体的一些属性,是这样的:

QPost post = QPost.post;
JPAQuery q = new JPAQuery(em);
List<Object[]> rows = q.from(post).where(...).list(post.id, post.name);

它工作正常。

如果我想查询一个关系属性,例如帖子评论:

List<Set<Comment>> rows = q.from(post).where(...).list(post.comments);

还可以。

但是当我想一起查询关系和简单属性时,例如

List<Object[]> rows = q.from(post).where(...).list(post.id, post.name, post.comments);

然后出了点问题,生成了错误的 SQL 语法。

然后我意识到不可能在一个 SQL 语句中将它们一起查询。

QueryDSL 是否有可能以某种方式处理关系并生成额外的查询(就像 hibernate 对惰性关系所做的那样),并加载结果?

或者我应该只查询两次,然后合并两个结果列表?

附言我真正想要的是每个帖子及其评论的 ID。所以连接每个帖子的评论 id 的函数更好,这种表达可能吗?

q.list(post.id, post.name, post.comments.all().id.join())

并生成一个子查询 sql,如 (select group_concat(c.id) from comments as c inner join post where c.id = post.id)

最佳答案

Querydsl JPA 受限于 JPQL 的表达能力,因此您所要求的是 Querydsl JPA 不可能实现的。你可以尝试用 Querydsl SQL 来表达它。这应该是可能的。此外,由于您不投影实体,而是投影文字和集合,因此它可能工作得很好。

或者,您可以加载仅加载评论 ID 的帖子,然后将 ID、名称和评论 ID 转换到其他内容。这应该在访问器被注释时起作用。

关于jpa - QueryDSL:查询关系和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7397832/

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