JPA, Карты и порядок вставки - PullRequest
3 голосов
/ 05 октября 2010

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

Так можно ли каким-то образом использовать LinkedHashMap или @OrderColumn with Maps, чтобы сохранить порядок вставки?

Ответы [ 2 ]

7 голосов
/ 05 октября 2010

Я не могу найти никаких доказательств в спецификации JPA 2.0, что аннотация @OrderColumn должна работать для Map. Цитирование спецификации:

11.1.39 OrderColumn Annotation

Аннотация OrderColumn указывает столбец, который используется для поддержания постоянный порядок список . поставщик постоянства несет ответственность для поддержания порядка при поиск и в базе данных. поставщик постоянства несет ответственность для обновления заказа при сброс к базе данных для отражения любая вставка, удаление или переупорядочение влияет на список. OrderColumn аннотация может быть указана на один ко многим или много ко многим отношения или элемент коллекция. OrderColumn аннотация указана на стороне отношения, которые ссылаются на Коллекция, которая должна быть заказана. Столбец заказа не отображается как часть состояние объекта или встраиваемый класс.

Если вы хотите сохранить порядок, используйте List (в вашем случае Embeddable). С Map, доступ к значениям с помощью клавиш.

0 голосов
/ 05 октября 2010

Мой гугл-фу указал мне на некоторые страницы, где говорят, что @OrderColumn можно использовать для всех коллекций - так что, похоже, он не ограничен списками или наборами.Хотя на всех страницах, которые я нашел, есть примеры с полями List.

В eclipse WIKI есть хорошая статья об аннотации @OrderColumn.


Редактировать

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

public Set<Map.Entry<?,?>> getPropertiesEntries() {
   Set<Map.Entry<?,?>> result = new TreeSet(myComparator);
   result.addAll(map.entrySet());
   return result;
}

и использовать эту запись, устанавливая всякий раз, когда выцикл по карте.

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