簡體   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