Ну, сообщение об ошибке довольно ясно: Double
не является сущностью.Если вы хотите отобразить коллекцию базовых элементов, используйте аннотацию CollectionOfElement
(из Hibernate) или аннотацию ElementCollection
(из JPA 2.0).
Итак, если вы используете аннотации Hibernate 3.4,попробуйте это:
@CollectionOfElements(targetElement = Double.class)
@org.hibernate.annotations.MapKey(targetElement = String.class)
Map data;
Или, при использовании дженериков:
@CollectionOfElements
Map<String, Double> data;
А если вы используете аннотации Hibernate 3.5+, предпочтите аннотации JPA 2.0:
@ElementCollection(targetClass = Double.class)
@MapKeyClass(String.class)
Map data;
Или, при использовании дженериков:
@ElementCollection
Map<String, Double> data;
Ссылки
- Аннотации Hibernate 3.4 Справочное руководство
- Спецификация JPA 2.0
- Раздел 11.1.12 «Аннотация ElementCollection»
- Раздел 11.1.28 «MapKeyClassАннотация "
Знаете ли вы, как настроить имена столбцов" ELEMENT "и" MAPKEY "?
Вы можете полностью настроить результат.Я думаю, что пример ниже демонстрирует все:
@CollectionOfElements(targetElement = Double.class)
@JoinTable(name = "COLLECTION_TABLE",
joinColumns = @JoinColumn(name = "PARENT_ID"))
@org.hibernate.annotations.MapKey(targetElement = String.class,
columns = @Column(name = "SOME_KEY"))
@Column(name = "SOME_VALUE")
private Map data;
- Имя таблицы сбора для
Map
определяется с помощью JoinTable
- Имя столбца дляключ к родителю задается с помощью
JoinColumn
в JoinTable
- Имя столбца для ключа карты определено в
MapKey
- Имя столбца для значения карты определяется с помощью
Column