2015-09-15 31 views
2

我有一個名爲「書」的實體類,它有一個「作者」,這是另一個實體類,它是一個多對一的關係。 因此,當我稱之爲本地查詢時,它是否也獲取作者?我真的不想獲取作者對象,因爲我只需要檢索有關該書的信息,而不是作者。 (我認爲查詢作者表是浪費時間)休眠本機查詢獲取子對象

Query q = JPA.em().createNativeQuery("select * from Book where id =?",Book.class).setParameter(1,bookId); 

如何僅使用本地查詢獲取沒有作者信息的Book對象?

回答

1

你可以試試:

@OneToMany(mappedBy = "columnName", cascade = CascadeType.REMOVE, orphanRemoval = true, fetch = FetchType.LAZY) 
private Author author; 

因此這將不會加載作者的數據。 只要你在任何地方做getAuthor那麼只有它會得到數據,否則不會。 FetchType.LAZY在讀取數據時告訴hibernate不取數據。

我建議,如果只有1 child entity那麼你可以使用FetchType.EAGER但如果有more than one child entity那麼它是不是最好使用EAGER。當時LAZY取類型更好用。

我上面的代碼提取類型的hibernate配置基礎知識。

+0

這聽起來不對。首先,如果它是OneToMany關係,那麼作者應該是List或Set。其次我的情況是ManyToOne關係。在那種情況下,它總是熱切地獲取。我也不想僅僅因爲這個查詢而改變我的實體類。在其他情況下,我可能需要總是急於獲取。如何在不同的問題中停止OneToOne或ManyToOne的提取。只是簡單地添加FetchType.LAZY不起作用 –

+0

是的,它應該是實體類的集合元素。我也回答說,我已經給出了這個例子的基本概念。 –

+0

但你的榜樣並沒有幫助我。這是一個完全不同的場景。我的問題是關於本機查詢,而不是HQL –