0
我正在使用條件來選擇具有引用其他表的字段的實體列表,所以我使用了別名。問題是,當我嘗試訪問連接字段時,hibernate執行另一個select到數據庫。這實際上是無效的,因爲這是爲每個結果行執行一個查詢。訪問連接字段的休眠標準
誰能告訴我爲什麼會發生這種情況?的標準
使用(減少到只有相關線路)
List<Country> list = session.createCriteria(Country.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.createAlias("locations", "location")
.list();
for (Countries cntry : list){
cntry.getLocations().size(); // here hibernate execute another query
}
國家(的重要部分)
@Entity
public class Country {
// other fields as uuid etc.
@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
private List<Location> locations;
// getters and setters
}
位置(的重要部分)
@Entity
public class Location {
// other fields as uuid etc.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COUNTRY_UUID")
private Country country;
// getters and setters
}
查詢已加入所有連接表的所有字段,但看起來這些字段未設置。設置獲取模式並沒有幫助:( – cici
你的問題肯定與你的獲取模式有關。你使用的是什麼版本的hibernate?舊版本可能需要FetchMode.EAGER。 – teacurran