Hibernate, Criteria API, Сортировка Enum Поле Произвольно - PullRequest
2 голосов
/ 20 декабря 2011

Каков наилучший способ произвольной сортировки поля?

Пример:

Каждый Content имеет Status.Status s id - перечислениеБизнес хочет видеть список Content, отсортированный в порядке Status.Id.REJECTED, Status.Id.IN_WORK, а затем Status.Id.PENDING.

Как видите, он не отсортирован по алфавиту.И кто-то может изменить свое мнение и хотеть, чтобы он сортировался по-другому или добавить больше статуса.

Каков наилучший способ справиться с этой ситуацией?Единственные решения, которые я могу придумать, - это добавить order к Status или отдельно запросить каждый Status, а затем программно соединить его вместе.Но это кажется грязным.

Я понимаю, что в этой предпосылке есть какая-то наследственность абсурда, но она не моя, и я не могу ее контролировать.Любая помощь с благодарностью.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

В итоге я нашел самый чистый способ добавить int status.order и затем упорядочить статус 'по этому столбцу. Это дало мне:

  • Возможность использовать только Criteria API
  • Более чистый код, который не беспокоится о бизнес-причинах заказа в слое данных
  • Возможность оперативно менять порядок, изменяя значения в базе данных.

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

1 голос
/ 20 декабря 2011

Вы можете использовать ordinal. Но, как вы сказали, со временем это может измениться.

Затем вы можете изменить запрос и позволить DB сделать это. Проще сделать это с HQL или SQL.

select 
    case 
       when a.FIELD = 'something' 
       then 1 
       else 0 
    end as myOrdr 
from A a 
order by myOrdr

В любом случае вам придется нажать на код, чтобы изменить порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...