JPQL / HQL - Можно ли указать порядок, предоставив список идентификаторов? - PullRequest
0 голосов
/ 02 октября 2011

(Примечание: я использую платформу Play!, Которая использует Hibernate в качестве реализации JPA.)

У меня есть список идентификаторов, и я хочу получить элементы из базы данных, сохраняя порядоккоторый используется в моем списке идентификаторов.

Допустим, мой список: 444,222,333,111

Я хочу, чтобы JPQL / HQL сначала возвратил элемент с идентификатором # 444, а затем элемент с идентификатором # 222и т. д.

Я пробовал что-то вроде:

id in (444,222,333,111) order by id=444 DESC, id=222 DESC, id=333 DESC, id=111 DESC

Но, похоже, это не работает.

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

Ответы [ 3 ]

1 голос
/ 02 октября 2011

Если нет «естественного» заказа, то, скорее всего, вам нужно будет сделать заказ вручную;Вы могли бы иметь возможность полагаться на порядок БД в зависимости от БД и структуры запроса, но IMO это рискованно.

С положительной стороны, если у вас нет огромного количества объектов, накладные расходы тривиальны.

0 голосов
/ 02 октября 2011

Я думаю, вам придется отсортировать элементы в Java:

public void sortItems(List<Item> items, final List<Long> ids) {
    Collections.sort(items, new Comparator<Item>() {
        @Override
        public int compare(Item i1, Item i2) {
            int index1 = ids.indexOf(i1.getId());
            int index2 = ids.indexOf(i2.getId());
            return Integer.valueOf(index1).compareTo(Integer.valueOf(index2));
        }
    });
}
0 голосов
/ 02 октября 2011

Этот конкретный случай будет легко обработан с использованием ORDER BY id DESC, но я предполагаю, что это только неудачно выбранный пример.

Я бы сказал, что это невозможно, если вы не можете найти способ принятьПреимущество SQL в этом.

У вас должен быть уровень персистентности для отображения объектов из базы данных в Java (вы не должны передавать ResultSet из уровня персистентности).Было бы тривиально сделать это там.

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