1. 程式人生 > >【Hibernate學習】 —— 抓取策略(註解方式)

【Hibernate學習】 —— 抓取策略(註解方式)

屬性的方法 ould per hql 項目 操作記錄 新建 應用程序 span

當應用程序須要在關聯關系間進行導航的時候。hibernate怎樣獲取關聯對象的策略。

抓取策略的方式:

FetchType.LAZY:懶載入。載入一個實體時。定義懶載入的屬性不會立即從數據庫中載入。

FetchType.EAGER:急載入,載入一個實體時,定義急載入的屬性會馬上從數據庫中載入。

在項目中的體現。我這裏有兩個實體。一個放基礎數據的實體。還有一個是放操作記錄的實體。

這兩個實體的關系是一對一關系,因此要把基礎數據中的主鍵放在操作記錄中作為外鍵。查詢的時候查詢操作記錄表順便把基礎表相關信息帶出來:

這裏用的是註解的方式:

private Company company;
@OneToOne(fetch=FetchType.EAGER)
@JoinColumn(name="company_id")
publicCompany getCompany() {
returncompany;
}
publicvoid setCompany(Company company) {
this.company= company;
}

抓取策略的體現:fetch=FetchType.EAGER,這裏我們查詢後要立刻顯示出來,故選用了急載入。

這裏遇到了一個問題:

Could not determinetype for: com.tgb.xyb.entity.Company, at table: OperateRecord, for columns:[org.hibernate.mapping.Column(company)]

解決方式:註解放在get方法上面(註:原來把註解放在了方法上)

是由於get方法是外部獲取類內部屬性的方法。所以凡是須要獲取屬性或者對象的都是在get方法上聲明的。

比如Spring的依賴註入,也是從get方法去註入。

如今用了抓取策略的優點是。我們僅僅須要把這個策略加上,那麽對應的實體就會關聯上。我們就不須要去寫對應的HQL語句去關聯或者是新建一個實體把這兩個實體關聯起來。

【Hibernate學習】 —— 抓取策略(註解方式)