Какой лучший способ заказать коллекции в Hibernate?

У меня есть список значений для класса в Hibernate. Моей первоначальной реализацией был Set, но он возвращает значения в том, что по сути является "порядком базы данных" (вероятно, на основе кластерного индекса, который является почти порядком вставки).

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

То, что я хотел бы, это атрибут sortOrder, который не привязан к позиции в списке, так что если есть дубликаты, т.е. { 1, 3, 3, 10 }, он соответствующим образом отображается в { 0, 1, 2, 3} где порядок 2-го и 3-го элемента возвращается к порядку в базе данных. Нули также хороши, и мне все равно, будут ли они помещены в начале или в конце списка (при условии, что поведение является последовательным).

Я посмотрел на Bag, но я не был уверен, как включить атрибут sortOrder в определение, и меня немного беспокоило, что он допускает дублирование. Я все еще хотел бы иметь те же ограничения, что и при использовании Set (я считаю, что кортеж родитель / потомок всегда был уникальным).

Предложения? Могу ли я настроить Bag, чтобы он действовал как список с помощью sortOrder, а не как список с индексом? Что еще мне нужно сделать, чтобы защитить код от зависания от данных, введенных непосредственно SQL?

2 ответа

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

Я не думаю, что у вас будут другие варианты, так как вы изменяете данные с помощью sql, а также hibernate.

Если вы используете спящие аннотации, вы можете использовать javax.persistence.OrderBy чтобы упорядочить элементы "в памяти" по указанному свойству без введения столбца индекса, см.:

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/

Другие вопросы по тегам