[英]Spring Data JPA. How to filter by child collection attribute child collection result only?
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
。
我打算在這里考慮以下情況之一:
實現實體模型以在Calendar
實體中使用@OneToMany
映射,其中在內部集合中我們可以設置一組UserCalendarDetails
實體。 如果加載了( UserCalendarDetails
)集合,則應對其進行過濾,並且僅包含一個對象UserCalendarDetails
(由於限制,請參見上user_calendar_uk
)。 在這種情況下,我還需要使兩個數據庫請求也以單獨的方式加載Calendar
和UserCalendarDetails
,以在數據庫請求時間中通過userId指定UserCalendarDetails
篩選器。
嘗試使用休眠繼承@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = “user_id”)
為user_calendar_details
和實體模型映射應該是@OneToOne
(之間Calendar
和user_calendar_details
)。
具有低級數據庫請求的一些想法在連接中使用了限制。 這似乎是解決我的問題的最真實有效的方法。
我已經研究了這個想法,但得出的結論是不可能的,但我可能會誤會。 我也在stackoverflow上檢測到類似的想法,但沒有肯定的答案。 請確認我的結論或有想法解決此問題(可能是示例)。
我不清楚是否可能。 如果以const方式使用,我將使用@DiscriminatorValue(“myConcreteUserId”)
。 但應以動態方式使用。 而且我還沒有辦法。 有什么想法嗎?
如何使用@OneToOne
映射和user_calendar_details
來以級聯方式保存日歷實體(請記住:在db中,每個calendar
user_calendar_details
都可以有幾行,但是每次加載僅應有一個)?
據我了解...數據模型如下:1用戶與用戶日歷詳細信息具有一對多關系(並且此關系是雙向的,因此用戶日歷詳細信息也與用戶具有多對一關系)
2個用戶日歷詳細信息與日歷具有多對一關系(並且該關系也可以是雙向的,因此日歷與用戶日歷詳細信息具有一對多的關系)
3個用戶日歷詳細信息與日歷詳細信息具有一對一關系(我認為您可能考慮將它們合並到一個表中..但這取決於要求)
現在,讓我們以相同的方式設置域模型,用戶日歷詳細信息將與日歷具有一對一的關系,並具有一對一的關系。 日歷詳細信息...。因此,您只需按用戶ID(使用條件或查詢或使用I'd構造的用戶對象)簡單地加載用戶日歷詳細信息,默認情況下就會急切加載一對一關系(不是兩個查詢...只有一個),因此您將獲得相關的日歷和日歷詳細信息對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.