[英]Spring Data JPA (Hibernate) One to Many Relationship with Dynamic Condition
我的兩個實體Airport
和AirportTranslation
之間存在一對多的關系:
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應用程序的任何干凈有效的示例。
沒有什么選擇。
簡單,但很慢,我會考慮設計氣味,以過濾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.