Спящий режим — нет обновлений для PersistentSet

#hibernate #persistent-set

#переход в спящий режим #постоянный набор

Вопрос:

Я использую стандарт JPA 2.0 и hibernate в качестве поставщика сохраняемости. При работе с ElementCollections мне любопытно узнать, почему не org.hibernate.collection.Постоянный набор обновляется?

Метод isRowUpdatePossible() в PersistentSet возвращает false . По сравнению с PersistentList, которые могут обновляться, Set выполняет несколько удалений и вставок вместо простого обновления.

Например, рассмотрим мою сущность, имеющую набор, который в настоящее время имеет значения {1, 2, 3}. Я обновляю набор, очищая его, а затем добавляя {4, 5, 6}. При вызове EntityManager.merge (entity) запускаются запросы 3 на удаление и вставку.

Если в приведенном выше примере я использую список, то запускается только один запрос на обновление со значениями привязки.

Количество запросов приводит меня к выводу использовать список, когда моя база данных может избежать дубликатов в столбце.

Подводя итог вопросам

  1. Почему org.hibernate.collection не работает.Постоянный набор обновляется? Метод isRowUpdatePossible() в PersistentSet возвращает false .
  2. Лучше ли устанавливать список, когда база данных может обрабатывать дубликаты?

Мысли по этим вопросам были бы оценены.

Комментарии:

1. Я не понимаю, если вы используете JPA, почему у вас есть функции, специфичные для поставщика, такие как постоянный набор и список, которые вы упоминаете? Разве вы не можете выполнить работу с обычным JPA?

2. Я думаю, вы неправильно поняли мой вопрос. Моя точка зрения была связана с производительностью. Почему set не обновляется и должен ли List быть предпочтительнее set?