2012-04-30 210 views
6

我有一些邏輯刪除的記錄(即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子句以及如何操作?

回答

2

@ManyToOne不支持@WhereJoinTable。自5年以來有關於科目開放的bug HHH-4335。除了在bug報告中提到的使用視圖(在只讀訪問的情況下),我不知道任何解決方法。

+0

是否有可能重新映射相同的表,並把過濾器上的映射,即,讓我有一種只讀'ActiveSite'實體? – pstanton

+0

是的,你可以做到這一點。但是,正如期望的那樣,ActiveSite和Site之間的連接對於Hibernate來說是未知的。因此,僅當從數據庫讀取(或刷新)相應站點時,對ActiveSite進行的更改纔會鏡像到ActiveSite。 –

+0

是的,在這種情況下可以接受,但是我試圖在我的@ Entity上使用@Where(clause =「active = true」),而hibernate將它轉換爲'site0_.active = site0_。真正的.. ..如果你能幫我解決這個問題,我會給你打勾(因爲你的答案是正確的..)感謝你的幫助! – pstanton

1

@JoinColumnOrFormula anotation是一個合適的解決方法

+0

這不是問題的答案,請將評論用於討論和未回答相關的帖子 – Moseleyi