Hibernate 3.6 - session.get () против session.load ()

Я пытаюсь понять, в чем разница в возвращаемом объекте и поведении Hibernate 3.6session.get() а такжеsession.load().

ИзJavadoc:

получить():

Вернуть постоянный экземпляр заданного класса сущности с заданным идентификатором или значение NULL, если такого постоянного экземпляра нет. (Если экземпляр уже связан с сеансом, верните этот экземпляр. Этот метод никогда не возвращает неинициализированный экземпляр.)

нагрузка ():

Вернуть постоянный экземпляр заданного класса сущности с заданным идентификатором, предполагая, что экземпляр существует. Этот метод может возвращать прокси-экземпляр, который инициализируется по требованию при обращении к методу без идентификатора.

У меня три вопроса:

Javadoc не говорит, когдаload() может вернуть прокси - есть ли способ узнать это заранее?

когдаload() возвращает прокси - это значитload() не получил доступ к базе данных, я прав? Тогда что, если я предоставилload() с идентификатором, который не существует в базе данных? Теперь у меня будет сеанс с недействительным идентификатором (без исключения). Теперь я хочу позволить другому постоянному экземпляру указывать на этот прокси - это будет работать? Для этого сценария мне не нужно инициализировать прокси, мне нужен только его идентификатор (который у меня есть, хотя он недействителен, поскольку его нет в базе данных). Итак, я думаю, что спрашиваю, правильно ли мое описание, и мне всегда нужно проверять послеload() возвращенный объект сisInitialized() чтобы удостовериться, что он представляет действительный объект (или, по крайней мере, действительный прокси-сервер), то есть с действительным идентификатором.

Кроме того, что произойдет, еслиload() возвращает прокси - таким образом, прокси является экземпляром, который уже связан с сеансом. Тогда согласно описаниюget(): "Если экземпляр уже связан с сеансом, верните этот экземпляр." - так жеget() вернуть прокси? Так как согласно описаниюget(): "Этот метод никогда не возвращает неинициализированный экземпляр."

Спасибо!

ОБНОВИТЬ

Правильно ли следующее?

(A) Я думаю, что обаload() а такжеget() сначала попытается проверить кэш сеанса перед тем, как перейти к БД, поэтому было бы неправильно утверждать, что любой из них всегда обращается к БД или всегда возвращает прокси.

(B) Инициализированный прокси-сервер отличается от исходного экземпляра, как вы можете прочитать здесь:http://blog.xebia.com/2008/03/08/advanced-hibernate-proxy-pitfalls/

Ответы на вопрос(1)

Ваш ответ на вопрос