[quote]在同样对查询中fetch=FetchType.LAZY的查询效率是4S,
而使用 fetch=FetchType.Eager耗时 123S, [/quote]
[code="java"]
public class DictionaryType {
private List<DictionaryData> dictionaryDatas = new ArrayList<DictionaryData>(0);
}
[/code]
DictionaryType与DictionaryData是一对多的关系
假如现在有1条type_code='FUNC'的DictionaryType记录,对应着1000个DictionaryData
那么,假设我们要查询出所有DictionaryType
1、使用FetchType.LAZY
[code="sql"]select this_.dict_type_id as dict1_1_0_, this_.type_code as type2_1_0_, this_.type_name as type3_1_0_ from dictionary_type this_ where this_.type_code='FUNC'[/code]结果是1条记录,共3个字段
2、使用FetchType.Eager
[code="sql"]select this_.dict_type_id as dict1_1_1_, this_.type_code as type2_1_1_, this_.type_name as type3_1_1_, dictionary2_.dict_type_id as dict5_3_, dictionary2_.dict_data_id as dict1_3_, dictionary2_.dict_data_id as dict1_0_0_, dictionary2_.data_code as data2_0_0_, dictionary2_.data_name as data3_0_0_, dictionary2_.dict_type_id as dict5_0_0_, dictionary2_.priority as priority0_0_ from dictionary_type this_ left outer join dictionary_data dictionary2_ on this_.dict_type_id=dictionary2_.dict_type_id where this_.type_code='FUNC'[/code]
结果是1000条记录,共10个字段
相比而言,是不是会慢很多呢?
如果有10个DictionaryType,FetchType.Eager查询出来的可能有上万条记录,而我们可能只想显示DictionaryType,而暂时用不到DictionaryData,那这样的速度是很糟糕的