Каково различие между сессией. Слияние и сессия. SaveOrUpdate?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

86
задан Michael 22 November 2017 в 18:05
поделиться

2 ответа

Это от раздела 10.7. Автоматическое обнаружение состояния из Быть в спящем режиме Справочной документации:

saveOrUpdate () делает следующее:

  • , если объект является уже персистентным на этой сессии, ничего не сделайте
  • , если другой объект, связанный с сессией, имеет тот же идентификатор, выдайте исключение
  • , если объект не имеет никакого свойства идентификатора, сохраните () его
  • , если идентификатору объекта присвоили значение недавно инстанцированному объекту, сохраните () его
  • , если объект является имеющим версию (< version> или < timestamp>), и значение свойства версии то же значение, присвоенное недавно инстанцированному объекту, сохраните () его
  • иначе обновление (), объект

и слияние () очень отличается:

  • , если существует персистентный экземпляр с тем же идентификатором, в настоящее время связываемым с сессией, скопируйте состояние данного объекта на персистентный экземпляр
  • , если нет никакого персистентного экземпляра, в настоящее время связываемого с сессией, попытайтесь загрузить его из базы данных или создать новый персистентный экземпляр
  • , персистентный экземпляр возвращается
  • , приведенный пример не становится связанным с сессией, это остается отдельным

, необходимо использовать Слияние (), при попытке обновить объекты, которые были однажды отсоединены от сессии, особенно если могли бы быть персистентные экземпляры тех объектов, в настоящее время связываемых с сессией. Иначе использование SaveOrUpdate () в этом случае привело бы к исключению.

156
ответ дан Õzbek 24 November 2019 в 08:01
поделиться

Насколько я понимаю, merge() возьмет объект, который не может быть связан с текущей сессией и скопировать ее состояние (значения свойств, и т.д.) к объекту, который является связан с текущей сессией (с тем же значением/идентификатором PK, конечно).

saveOrUpdate() будет звонить , Сохраняют или Обновление на Вашей сессии, на основе значения идентификационных данных данного объекта.

9
ответ дан Geoffroy 24 November 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: