Подтвердить что ты не робот

Разница между набором и сумкой в ​​спящем режиме

В чем основное отличие между коллекциями Set и Bag в Hibernate? В каких сценариях мы должны использовать Set и Bag?

4b9b3361

Ответ 1

A <bag> - неупорядоченный набор, который может содержать дублированные элементы. Это означает, что если вы сохраняете сумку с некоторым порядком элементов, вы не можете ожидать, что тот же порядок сохранится при извлечении коллекции. В структуре коллекций Java нет понятия "сумка", поэтому мы просто используем java.util.List соответствует <bag>.

A <set> похож на <bag>, за исключением того, что он может хранить только уникальные объекты. Это означает, что никакие повторяющиеся элементы не могут содержаться в наборе. Когда вы добавите один и тот же элемент в набор во второй раз, он заменит старый. По умолчанию неупорядоченный набор, но мы можем попросить его отсортировать. Соответствующий тип a в Java - java.util.Set.

Примеры

Отображение <set>

 <set name="employees" table="employee"
            inverse="true" lazy="true" fetch="select">
        <key>
            <column name="department_id" not-null="true" />
        </key>
        <one-to-many class="net.viralpatel.hibernate.Employee" />
    </set>

Отображение <bag>

  <bag name="employees" table="employee"
                inverse="true" lazy="true" fetch="select">
            <key>
                <column name="employee_id" not-null="true" />
            </key>
            <one-to-many class="net.viralpatel.hibernate.Employee" />
        </bag>

Таким образом, оба отображаются точно так же в hbm файле. Но отличается только тем, как он обрабатывает повторяющиеся записи.

Источник: Hibernate One to Many XML Tutorial

Ответ 2

Из справки Hibernate:

Сумки являются наихудшим случаем, поскольку они позволяют дублировать значения элементов и, поскольку у них нет индекса столбца, первичный ключ не может быть определен. Hibernate не имеет возможности различать повторяющиеся строки.

А также:

Однако существует конкретный случай, когда сумки, а также списки намного более эффективны, чем наборы. Для коллекции с inverse="true", стандартной двунаправленной идиомой отношения "один ко многим", например, мы можем добавлять элементы в сумку или список без необходимости инициализации (выборки) элементов пакета.

Ответ 3

Оба являются неупорядоченными коллекциями. Сумки позволяют дублировать. Наборы не делают.

Ответ 4

Кратковременное различие между различными коллекциями ниже

  • Установить - нет дубликатов и нет порядка
  • Сумка. Может содержать дубликаты и порядок (также называемый, неупорядоченный список или набор с дубликатами).

  • Список. Может содержать дубликаты, но с сохраненным порядком.

    • Может быть создан с помощью @OrderBy для сохранения порядка