繁体   English   中英

如何检索按 ID 分组的所有实体?

[英]How to retrieve all Entities Grouped By Id?

我正在使用 spring-jpa 并使用实体管理器进行持久性。

我正在开发一个弹簧应用程序并尝试检索在某个时间之前一直存在的所有实体,并将它们分组到他们的 ID 上。

使用 entitymanager 在 createQuery 中尝试了以下查询

"Select se From SampleEntity se where se.createdDate > :elapsedTime group by se.uid"

model 看起来像这样:

class SampleEntity
{

@Id
private String uid;      //Cannot be null

@Id
private String uid2;     //Should be unique, 

//also combo of uid, uid2 should be unique

private String name;

private Date createdDate;

private Date updatedDate;

}

假设db中有以下数据

Uid     Uid2     Name     CreatedDate            UpdatedDate
A-123   X-123     AX      10/6/2019 10:00:00AM   10/6/2019 10:00:00AM
A-123   X-124     AX      10/6/2019 10:00:20AM   10/6/2019 10:00:20AM
B-124   Y-125     BY      10/6/2019 10:01:00AM   10/6/2019 10:01:00AM
B-124   Y-126     BY      10/6/2019 10:01:20AM   10/6/2019 10:01:20AM

实际结果:

不断收到错误“不是按表达式分组”

预期的:

我希望将实体作为 Uid 组进行检索。

因此,我希望能够查询和检索 2 个对象的列表,其中每个 object 依次是具有相同 uid 的实体列表/数组。

Object 1 - 将包含 2 个样本实体对象,其中将包含来自以下 2 行的数据: A-123 X-123 AX 10/6/2019 10:00:00AM 10/6/2019 10:00:00AM A-123 X -124 AX 2019 年 10 月 6 日上午 10:00:20 2019 年 10 月 6 日上午 10:00:20

Object 2 - 将包含 2 个样本实体对象,其中将包含来自以下 2 行的数据: B-124 Y-125 BY 10/6/2019 10:01:00AM 10/6/2019 10:01:00AM B-124 Y -126 2019 年 10 月 6 日上午 10:01:20 2019 年 10 月 6 日上午 10:01:20

这可能吗? 如果是,如何? 我错过了什么?

当使用 GROUP BY 时,只有分组列或聚合 function (COUNT...) 可以在 SELECT 子句中使用,就像 SQL 查询一样。 这个例子将是一个正确的查询,它会产生一个 uid 列表。

Select se.uid From SampleEntity se where se.createdDate > :elapsedTime group by se.uid

但是,他的查询不允许您检索对象列表,因为 SQL group by 不能以这种方式工作,而且我认为 JPA 不可行。 您必须进行常规查询并在服务层中构建嵌套列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM