“在注释ConcurrentHashMap时,在hibernate中非法尝试将非集合映射为@OneToMany,@ ManyToMany或@CollectionOfElements”

时间:2011-11-17 14:54:52

标签: java hibernate

我试过注释一个属性访问器,其返回值是一个映射,如下所示:

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

这符合hibernate用户指南(第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 个答案:

答案 0 :(得分:42)

查看主题6.1。此link上的持久馆藏。

从链接中, Hibernate要求将持久的集合值字段声明为接口类型。实际的界面可能是java.util.Set, java.util.Collection, java.util.List, java.util.Map, java.util.SortedSet, java.util.SortedMap或你喜欢的任何东西(“你喜欢的任何东西”意味着你必须编写org.hibernate.usertype.UserCollectionType的实现。)