簡體   English   中英

Spring Data JPA(休眠)與動態條件的一對多關系

[英]Spring Data JPA (Hibernate) One to Many Relationship with Dynamic Condition

我的兩個實體AirportAirportTranslation之間存在一對多的關系:

public class Airport {
    @Id
    @Column(name = "id")
    private Long id;

    @OneToMany(mappedBy="airport", fetch = FetchType.LAZY)
    private List<AirportTranslation> translations;
}

和:

public class AirportTranslation implements Serializable {
    @Id
    @Column(name = "id", updatable = false)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "airport_id")
    private Airport airport;

    @Column(name = "lang")
    private String lang;

    @Column(name = "name")
    private String name;    
}

現在,我想使用常規語法: airport.getTranslations()根據系統的當前語言獲取機場的所有翻譯。

由於當前語言是動態的,因此我無法使用hibernate @Where

我認為使用Hibernate @Filter可能是最好的選擇,但是我找不到用於Spring Boot應用程序的任何干凈有效的示例。

沒有什么選擇。

Java過濾

簡單,但很慢,我會考慮設計氣味,以過濾getter中的所有數據。

出於性能方面的考慮,我們寧願選擇篩選數據庫中的數據。

查詢過濾

另一種選擇是將過濾器手動添加到存儲庫,但是每次添加新過濾器時,您都必須始終記住將過濾器放入查詢中。

這會帶來一些維護問題。

休眠過濾

要獲取Hibernate過濾和Spring Data Jpa,有些棘手。

由於Spring Repositories是不與EntityManagers / Session對象進行交互的抽象,因此我們必須在會話上設置過濾條件以進行查詢,這與制作手動過濾器幾乎相同。

有關此解決方案的更多信息,請參閱LINK。

彈簧規格

我考慮使用Spring規范,這是最干凈,最適合使用某些業務/系統邏輯進行過濾的方法。 Spring文檔中有一章介紹了一些出色的示例,因此我不會將其粘貼粘貼。

請參考https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

暫無
暫無

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

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