【问题标题】:How to retrieve all Entities Grouped By Id?如何检索按 ID 分组的所有实体?
【发布时间】:2019-10-07 02:39:27
【问题描述】:

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

我正在开发一个 spring-application 并尝试检索在特定时间之前持续存在的所有实体,并将它们按其 Id 分组。

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

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

模型如下所示:

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 个对象的列表,其中每个对象依次是具有相同 uid 的实体的列表/数组。

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

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

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

【问题讨论】:

    标签: java jpa spring-data-jpa jpql


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多