Из форума Hibernate :
Это из книги Hibernate в действии. Хорошо, прочитайте это ..
Получение объектов по идентификатору
Следующий фрагмент кода Hibernate извлекает объект User из базы данных:
User user = (User) session.get(User.class, userID);
Метод get () является специальным, поскольку идентификатор уникальным образом идентифицирует один
экземпляр класса. Следовательно, приложения обычно используют идентификатор как
удобная ручка для постоянного объекта. Извлечение по идентификатору может использовать кеш
при получении объекта избегать попадания в базу данных, если объект уже кэширован.
Hibernate также предоставляет метод load ():
User user = (User) session.load(User.class, userID);
Метод load () старше; get () был добавлен в API Hibernate из-за пользователя
запрос. Разница тривиальна:
Если load () не может найти объект в кеше или базе данных, исключение
выброшены. Метод load () никогда не возвращает ноль. Метод get () возвращает
ноль, если объект не может быть найден.
Метод load () может возвращать прокси вместо реального постоянного экземпляра.
Прокси-это заполнитель, который запускает загрузку реального объекта, когда он
доступ в первый раз; На
С другой стороны, get () никогда не возвращает прокси.
Выбор между get () и load () прост: если вы уверены, что постоянный
объект существует, и небытие будет считаться исключительным, load () является
хороший вариант. Если вы не уверены, что существует постоянный экземпляр с данным
идентификатора, используйте get () и проверьте возвращаемое значение, чтобы увидеть, является ли оно нулевым Использование load () имеет
Еще одно следствие: приложение может получить действительную ссылку (прокси) на
постоянный экземпляр без обращения к базе данных, чтобы получить его постоянное состояние. Так
load () может не выдавать исключение, если не находит постоянный объект
в кеше или базе данных; исключение будет выдано позже, когда прокси
Доступ
Конечно, поиск объекта по идентификатору не так гибок, как использование произвольного
запросы.