我有一些邏輯刪除的記錄(即active=false
),這會導致我的@ManyToOne
映射出現問題,因爲連接列會返回多個結果。ManyToOne與where子句
我只需要包括其中active=true
,我想我能做到的記錄是:
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "site_id", referencedColumnName = "site_id", insertable = false, updatable = false)
@WhereJoinTable(clause = "active=true")
private Site site;
然而,這似乎是WhereJoinTable
不被使用的休眠(也許是其僅適用於OneToMany
?),因爲生成的SQL(日誌)中不顯示active=true
,問題仍然存在。
是否有可能爲ManyToOne
的加入包含where子句以及如何操作?
是否有可能重新映射相同的表,並把過濾器上的映射,即,讓我有一種只讀'ActiveSite'實體? – pstanton
是的,你可以做到這一點。但是,正如期望的那樣,ActiveSite和Site之間的連接對於Hibernate來說是未知的。因此,僅當從數據庫讀取(或刷新)相應站點時,對ActiveSite進行的更改纔會鏡像到ActiveSite。 –
是的,在這種情況下可以接受,但是我試圖在我的@ Entity上使用@Where(clause =「active = true」),而hibernate將它轉換爲'site0_.active = site0_。真正的.. ..如果你能幫我解決這個問題,我會給你打勾(因爲你的答案是正確的..)感謝你的幫助! – pstanton