I am not able to understand the difference between load and get
Основное отличие заключается в следующем: если load () не может найти объект в кеше или базе данных, возникает исключение. Метод load () никогда не возвращает ноль. Метод get () возвращает
ноль, если объект не может быть найден.
Другое отличие состоит в том, что метод load () может возвращать прокси вместо реального экземпляра, но get () никогда не возвращает прокси.
the following piece of code doesn't work when i give session.load. It gives null pointer exception. But same does work when i am using session.get() .
Если объект не найден, метод load выдаст исключение, но get не будет. Простой
Edit:
Чтобы разработать вещи,
Когда вызывается метод get (), он напрямую попадает в базу данных, извлекает результат и возвращает результат. Если подходящие поля не найдены, он с удовольствием вернет ноль.
Но когда load () выполняется, сначала он будет искать в кеше нужный объект. Если найден, все хорошо. Но если объект не найден в кеше, метод load () вернет прокси. Вы можете рассматривать этот прокси как ярлык для выполнения запроса к базе данных. Помните, что попадание в базу данных еще не сделано. Теперь, когда вы на самом деле получите доступ к объекту, прокси будет отслеживаться, и будет произведено попадание в базу данных.
Давайте рассмотрим простой пример.
User user=(User)session.load(User.class, new Long(1));//Line 1
System.out.println(user.getPassword());//Line 2
Если объект User с первичным ключом 1 недоступен в сеансе, метод load () установит прокси для базы данных в строке 1. Теперь, когда вызывается фактическое значение объекта 'user', то есть строка 2, прокси будет отслежен, и база данных будет поражена.
Надеюсь, это поможет.