標籤:rac lan 操作記錄 name 定義 get not 關聯 顯示
當應用程式須要在關聯關係間進行導航的時候。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學習】 —— 抓取策略(註解方式)