Одно возможное универсальное решение:
Создайте таблицу для сохранения информации сортировки, простейшим случаем будет одно сортируемое поле на объект с направлением:
table 'sorts'
* id: PK
* entity: String
* field: String
* direction: ASC/DESC enumeration (or ascending boolean flag)
Можно сделать большеусложняется добавлением userId для сортировки по каждому пользователю или добавлением таблицы sort_items с внешним ключом для поддержки сортировки по нескольким полям одновременно.
Как только вы сохраняете информацию сортировки, это очень простодобавление экземпляров Order к критериям (если это то, что вы используете) или объединение порядка по операторам в HQL.
Это также освобождает ваши сущности от обычной и порядковой информации, которая в данном случае звучит как правильнаяподход, так как упорядочение предназначено исключительно для взаимодействия с пользователем.
Обновление - постоянный порядок сущностей Учитывая тот факт, что вы хотите иметь возможность переупорядочивать сущности, а не просто определять для них сортировку, тогдавам действительно нужно сделать порядковое или индексное значение частью определения сущности.
Проблема, как я уверен, вы понимаете, состоит в том, что количество сущностей, которые необходимо обновить, в худшем случае перемещает последнюю сущность в верхнюю часть списка.
Выможно использовать значение приращения, отличное от 1 (скажем, 10), поэтому у вас будет:
ordinal | name
10 | Crosby
20 | Stills
30 | Nash
40 | Young
В большинстве случаев обновление строки потребует выбора двух элементов и обновления одного.Если я хочу переместить Янга в позицию 2, я выбираю текущий элемент 2 и предыдущий элемент из базы данных, чтобы получить порядковые номера 10 и 20. Используйте их для создания нового порядкового номера ((20 - 10) / 2 + 10 = 15),Теперь выполните одно обновление Янга с порядковым номером 15.
Если вы дойдете до точки, где деление на два дает тот же индекс, что и у одной из только что загруженных вами сущностей, это означает, что пришло время порождать задачунормализовать порядковые значения в соответствии с вашим первоначальным приращением.