2015-07-13 53 views
0

我在兩個對象之間有多對一的關係:SomeProjectType和Work Orders。在SomeProjectType,我有:休眠:使用無與倫比的密鑰來處理ManyToOne關係

@OneToMany(mappedBy = "project", fetch = FetchType.EAGER) 
private Set<WorkOrder> workOrders; 

SomeProjectType具有 「ProjectKey」 作爲@id它。

而在WorkOrder我:

@ManyToOne 
@JoinColumn(name = "WorkOrderProjectKey") 
private SomeProjectType project; 

我遇到的問題是,有時在工單中,「WorkOrderProjectKey」有一個項目的關鍵並不在SomeProjectType存在(我不知道爲什麼,但它是由設計)。

我的問題是:有沒有辦法讓Hibernate仍然返回行,即使有些不匹配?我已經嘗試過「nullable = true」和「optional = true」,但它仍然不起作用。

+0

你如何選擇:

@NotFound(action = NotFoundAction.IGNORE) 

從這裏回答這個得到? HQL或獲取或...? –

+0

我正在通過HQL進行選擇。這樣做:'query.createQuery(「FROM SomeProjectType WHERE projectKey =:projectKey」);' – Ascalonian

回答

0

嘗試此代碼,因爲我有同樣的問題,那麼我會改變代碼,並正常工作。

主鍵的表

@OneToMany(mappedBy = "project") 
private List<WorkOrder> workOrders; 

外鍵表

@ManyToOne 
@JoinColumn(name = "WorkOrderProjectKey") 
private SomeProjectType project; 
+0

「then」部分是否有不同之處?因爲它看起來與我以上相同 – Ascalonian

+0

因此,外鍵,只是小學,沒有區別?讓我試試看,謝謝! – Ascalonian

+0

當我嘗試,我得到以下錯誤:'org.hibernate.loader.MultipleBagFetchException:不能同時獲取多個袋' – Ascalonian