Ответ 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