簡體   English   中英

Spring Data JPA。 如何僅按子集合屬性過濾子集合結果?

[英]Spring Data JPA. How to filter by child collection attribute child collection result only?

技術:

  • java8;
  • 彈簧數據jpa;
  • hibernate5;
  • PostgreSQL;

狹窄:

user_table{ id ... } calendar{ id ... } user_calendar_details ( id BIGSERIAL PRIMARY KEY, user_id NOT NULL, calendar_id NOT NULL, CONSTRAINT user_calendar_uk UNIQUE (user_id, calendar_id), user_id BIGINT REFERENCES user_table (id), calendar_id BIGINT REFERENCES calendar (id) ); CREATE TABLE calendar_details ( id BIGSERIAL PRIMARY KEY, user_calendar_details_id BIGSERIAL, CONSTRAINT user_calendar_det_uk UNIQUE (user_calendar_details_id), user_calendar_details_id BIGINT REFERENCES user_calendar_details (id) ... );

問題:

請求日歷信息以僅為請求數據的用戶加載實體。 user_id可以從安全上下文中獲取)對於每個calendar核心實體,應僅加載一個映射表結果user_calendar_details和一個calendar_details

解決方法:

我打算在這里考慮以下情況之一:

1種

實現實體模型以在Calendar實體中使用@OneToMany映射,其中在內部集合中我們可以設置一組UserCalendarDetails實體。 如果加載了( UserCalendarDetails )集合,則應對其進行過濾,並且僅包含一個對象UserCalendarDetails (由於限制,請參見上user_calendar_uk )。 在這種情況下,我還需要使兩個數據庫請求也以單獨的方式加載CalendarUserCalendarDetails ,以在數據庫請求時間中通過userId指定UserCalendarDetails篩選器。

2種

嘗試使用休眠繼承@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = “user_id”)user_calendar_details和實體模型映射應該是@OneToOne (之間Calendaruser_calendar_details )。

3種

具有低級數據庫請求的一些想法在連接中使用了限制。 這似乎是解決我的問題的最真實有效的方法。

問題:

對1個變體的問題

我已經研究了這個想法,但得出的結論是不可能的,但我可能會誤會。 我也在stackoverflow上檢測到類似的想法,但沒有肯定的答案。 請確認我的結論或有想法解決此問題(可能是示例)。

問題2變體

我不清楚是否可能。 如果以const方式使用,我將使用@DiscriminatorValue(“myConcreteUserId”) 但應以動態方式使用。 而且我還沒有辦法。 有什么想法嗎?

問題3變體

如何使用@OneToOne映射和user_calendar_details來以級聯方式保存日歷實體(請記住:在db中,每個calendar user_calendar_details都可以有幾行,但是每次加載僅應有一個)?

據我了解...數據模型如下:1用戶與用戶日歷詳細信息具有一對多關系(並且此關系是雙向的,因此用戶日歷詳細信息也與用戶具有多對一關系)

2個用戶日歷詳細信息與日歷具有多對一關系(並且該關系也可以是雙向的,因此日歷與用戶日歷詳細信息具有一對多的關系)

3個用戶日歷詳細信息與日歷詳細信息具有一對一關系(我認為您可能考慮將它們合並到一個表中..但這取決於要求)

現在,讓我們以相同的方式設置域模型,用戶日歷詳細信息將與日歷具有一對一的關系,並具有一對一的關系。 日歷詳細信息...。因此,您只需按用戶ID(使用條件或查詢或使用I'd構造的用戶對象)簡單地加載用戶日歷詳細信息,默認情況下就會急切加載一對一關系(不是兩個查詢...只有一個),因此您將獲得相關的日歷和日歷詳細信息對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM