Когда вызывается Load, возвращается объект Proxy. Фактический запрос выбора все еще не запущен. Когда мы впервые используем какое-либо из сопоставленных свойств, выполняется фактический запрос. Если строка не существует в БД, она выдаст исключение. например,
Software sw = ( Software )session.load(Software.class, 12);
Здесь sw имеет тип прокси. И запрос на выбор еще не называется.
в отладчике Eclipse вы можете увидеть это как
sw Software$$EnhancerByCGLIB$$baf24ae0 (id=17)
CGLIB$BOUND true
CGLIB$CALLBACK_0 CGLIBLazyInitializer (id=23)
CGLIB$CALLBACK_1 null
CGLIB$CONSTRUCTED true
id null
prop1 null
softwareprop null
когда я использую
sw.getProp1()
сработал запрос на выборку. И теперь прокси теперь знает значения для всех сопоставленных свойств.
Где, когда вызывается get, запрос на выборку запускается немедленно. Возвращаемый объект не является прокси, но имеет реальный класс. например,
Software sw = ( Software )session.get(Software.class, 12);
Здесь SW относится к типу самого программного обеспечения. Если строка существует, то все сопоставленные свойства заполняются значениями в БД. Если строка не существует, то sw будет нулевым.
sw Software (id=17)
id Integer (id=20)
prop1 "prodjlt1" (id=23)
softwareprop "softwrjlt1" (id=27)
Как всегда, используйте load только в том случае, если вы уверены, что запись существует в БД. В этом случае работа с прокси безвредна, и будет полезно откладывать запрос к БД до тех пор, пока действительно не потребуется сопоставленное свойство.