当前位置: 首页 > 知识库问答 >
问题:

如何使用JPA CriteriaBuilder在WHERE中使用多个值

宗政金鹏
2023-03-14

我有一个带有3列的示例MyTable-id、common_id、creation_date,其中common_id分组条目。

现在,我想使用CriteriaBuilder从每个组中选择所有最新的条目(即每个常见的\u id获取最新的创建日期)。

SQL查询如下所示:

select * from MyTable where (common_id, creation_date) in (select common_id, max(creation_date) from MyTable group by common_id)

现在我尝试通过编写类似(cb是CriteriaBuilder,root是Root)的内容来创建place谓词:

cb.array(root.get('common_id'), cb.max(root.get('creation_date')))
                                .in(
                                    query.subquery(MyTable.class)
                                            .select(cb.array(root.get('common_id'), cb.max(root.get('creation_date'))))
                                            .groupBy(root.get('common_id')))

但不幸的是。数组不是一个表达式(它是一个CompoundSelect),所以我不能使用。在这上面。

谢谢你的指点!

共有1个答案

谈琛
2023-03-14

你能用JPQL创建它吗?据我所知,这是不可能的。

我看了Spect(4.6.16子查询),它谈到了“简单选择表达式”:

simple_select_clause ::= SELECT [DISTINCT] simple_select_expression

我相信,只有一个回报是可能的,如果你看看那里的例子,你不会发现任何类似的。

您需要为此使用NativeQuery。

 类似资料:
  • 问题内容: 搜索了几个小时,但我陷入了使用JPA的PlayFramework学习的困境。我正在建立一个示例网站,可以在其中发布帖子。但是这些帖子可以具有以下状态: PostDraft(帖子是草稿,不发布) PostPublished(帖子可以发布) 这些状态存储在单独的表中。显然,州立草稿 尚不可见。 所以我有这些课: 页面类(从表中获取页面信息,一个页面可以有多个帖子) 帖子类(帖子可以在草稿中

  • 问题内容: 我目前正在用Java编写一个大型项目,其中包含许多类,有些类很小,只用很少的方法表示对象。我的主班有一个记录器,它运行良好。我希望所有类只能使用一个记录器(带有一个控制台附加程序)。我试图将对记录器的引用传递给不同的类,但是看起来不正确。此外,有时我在不运行main的情况下在类上运行测试,因此未针对其他类初始化记录器。 我的意思是,如何做到这一点的最佳方法是如何从不同的类登录到一个日志

  • 我有一个使用RabbitMQ(spring-boot-starter-amqp)的Spring应用程序。 我想知道是否可以跨不同的类使用RabbitListener注释。 我目前有两个类:和 <代码>接收器。java: : RabbitMqConfig。java: 当我使用RabbitMQ管理工具向FanoutExchange发布消息时,类中的不会将任何内容记录到控制台。但是,如果此方法在类中,则

  • 我想按员工姓名搜索其ID。所以我用一个文本框输入他的名字和一个搜索按钮。员工的ID和姓名存储在employee表中,但姓名存储在3列中,即firstname、middlename和lastname。因此,我的问题是如何编写搜索ID的查询,因为我必须使用上述3列将名称与文本框中输入的名称进行比较。 请帮我解决这个问题。提前感谢。

  • 问题内容: 我正在尝试搜索文本和备注的多列,以查找某些我不想看到的特定短语和黑名单短语。 假设下表 前任。我想找到所有提到(在任何领域中)“苹果”但黑名单中的“苹果酱”的故事。 如何在where子句中使用别名?我找不到有关此主题的任何文档: 1)这种方法可行吗? 2)替代方法是否意味着我将在每次行迭代中执行多个字符串连接? 问题答案: 我不能在where子句中使用别名。 这种方法可行吗? 当然,将

  • 问题内容: 我有以下代码,给我错误: 码: 数据(或$ ids): DQL结果: 问题答案: 在研究此问题时,我发现了一些对于遇到此问题并寻求解决方案的人来说很重要的事情。 在原始帖子中,以下代码行: 将命名参数包装为数组会导致绑定参数编号问题。通过将其从数组包装中移除: 此问题应得到解决。在以前版本的Doctrine中这可能是个问题,但在最新版本的2.0中已解决。