2012-05-25 49 views
1

我在使用hibernate進行多對一映射時遇到了問題。我有兩個表,表A和表B.我映射這些表之間的多對一關係。兩個表格可以一起使用,也可以單獨使用。休眠映射中的最佳抓取實踐(多對一)

表中的類條款中的Java一樣的表示:

class A{ 
private B b; 
private Integer val1; 
private Integer val2; 
private Integer val3; 
} 

class B{ 
private Integer val1; 
private Integer val2; 
private Integer val3; 
} 

的問題是每當我嘗試檢索/獲取從表A記錄,Hibernate也從表B提取記錄所有的時間,我不要。它會導致性能問題。他們有辦法處理這種情況嗎?

請指導我一個合適的答案。

回答

2
@ManyToOne(lazy = true) 
private B b; 

是你所需要的。閱讀hibernate documentation瞭解更多詳情。

+1

+1請注意:如果您打算使用* collections *的延遲讀取,您應該查看[獲取策略](https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies)並確定策略最適合您的需求。 –

+0

我沒有使用Annotation ...我把lazy = true放在hbm中,但它不接受真正的值。 – user1417746

+0

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e7761:向下滾動一下,閱讀所有可設置的屬性及其文檔。懶惰=「代理」是你想要的,也是默認的。 –

0

您的要求適合Lazy Initialization。爲了實現它,你可以添加註釋或者在檢索數據的時候使用休眠會話的方法get

在你的情況,你可以這樣寫:

Session session = SessionFactory.getCurrentSession(); 
A aObject= (A) session.get(A.class, A_ID); 

在本https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies?_sscc=t鏈接指出:如果通過標識通過get()或load檢索

Hibernate3中加載單個實體實例() 。爲此實體映射的所有集合以及所有關聯的實體,都是通過多對多或一對一關聯進行加載的。