"Неверная попытка сопоставить не коллекцию как @OneToMany, @ManyToMany или @CollectionOfElements" в спящем режиме при аннотации ConcurrentHashMap

Я пробовал аннотировать свойство accessor, возвращающим значением которого является карта следующим образом:

@MapKeyColumn(name="parameter_name")
@ElementCollection
public ConcurrentHashMap<String, Serializable> getParameterValues()

Это соответствует руководству пользователя спящего режима (раздел 2.2.5.3.4.). Однако я получаю:

org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: ConfigurationParameterBag.parameterValues
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:324)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1723)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:1002)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:130)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:92)

Ответы

Ответ 1

Ознакомьтесь с разделом 6.1. Стойкие коллекции на этой ссылке.

Из ссылки, Hibernate требует, чтобы постоянные поля, содержащие данные, были объявлены как тип интерфейса. Фактический интерфейс может быть java.util.Set, java.util.Collection, java.util.List, java.util.Map, java.util.SortedSet, java.util.SortedMap или все, что вам нравится ( "что угодно" означает, что вам нужно будет написать реализацию org.hibernate.usertype.UserCollectionType.)