Как сохранить java.util.Set через JPA? - PullRequest
4 голосов
/ 17 апреля 2010

У меня есть поле aliases типа java.util.Set в одном Entity. Это Set не означает никакого отношения к сущности.

  1. Как я могу сохранить это поле aliases через JPA?

  2. Как это поле хранится в базе данных? Я думаю, что для базы данных это поле является многозначным атрибутом.

1 Ответ

7 голосов
/ 17 апреля 2010

Как я могу сохранить это поле псевдонимов через JPA?

JPA 1.0 не поддерживает коллекции базовых типов, поэтому вам придется либо:

  1. Представьте сущность и отобразите ее как @OneToMany ~ или ~
  2. Получите ваш Set, сохраненный в BLOB (как Serializable) ~ или ~
  3. Отметьте его @Transient и используйте другой метод получения / установки, чтобы сохранить его, используя пользовательское представление строки (используя разделитель) ~ или ~ *
  4. Используйте расширение вашего провайдера JPA, поддерживающее набор базовых типов (например, Hibernate имеет аннотацию @CollectionOfElements).

Решение № 1 будет самым чистым портативным решением. Решение № 2 может привести к некоторым проблемам при обновлении. Решение № 3 - ужасный обходной путь для № 2. Решение № 4 чистое, но не переносимое.

В JPA 2.0 имеется аннотация @ElementCollection для этого варианта использования (это, конечно, идеальное решение).

Как это поле хранится в базе данных

В зависимости от выбранной реализации, он может быть в BLOB, в VARCHAR, в другой таблице.

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