LIMIT n, 1 не работает в MS SQL Server. Я думаю, что это просто единственная основная база данных, которая не поддерживает этот синтаксис. Справедливости ради, он не является частью стандарта SQL, хотя он так широко поддерживается, что он должен быть. Во всем, кроме SQL Server LIMIT, отлично работает. Для SQL-сервера я не смог найти элегантное решение.
Bag
является неупорядоченной коллекцией и, в отличие от idbag
, он не использует дополнительный столбец для хранения каждого индекса элемента.
Нет такой вещи, как вариант использования, когда bag
, и idbag
не будет. Единственная разница в их эффективности:
Суммы являются наихудшим случаем, так как они допускают повторяющиеся значения элементов и, поскольку у них нет столбца индекса, первичный ключ не может быть определен. Hibernate не имеет возможности различать повторяющиеся строки. Hibernate разрешает эту проблему, полностью удаляя в одном DELETE и воссоздавая коллекцию всякий раз, когда она изменяется. Это может быть неэффективным.
blockquote>
idbag
- это устаревшее отображение гибернации, и они были использованы для предоставления более эффективных альтернативных альтернативных ассоциацийВы можете определить семантику idbag с помощью аннотации JPA @OrderColumn :
@OneToMany(mappedBy = "department") @OrderColumn(name = "index_id") private List<Employee> employees;
Таким образом вы можете использовать оба Списки и наборы для упорядочения коллекций.
Итак, старайтесь придерживаться двунаправленных ассоциаций, поскольку они являются наиболее эффективными, и они лучше имитируют отношения с базой данных. Если вам нужна стратегия индекса определенного элемента, используйте ассоциацию @OrderColumn.