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

Posted

技术标签:

【中文标题】注释 ConcurrentHashMap 时,在休眠中“非法尝试将非集合映射为 @OneToMany、@ManyToMany 或 @CollectionOfElements”【英文标题】:"Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements" in hibernate when annotating a ConcurrentHashMap 【发布时间】:2011-11-17 14:54:52 【问题描述】:

我尝试过注释返回值为映射的属性访问器,如下所示:

@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。此link 上的持久集合。

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

【讨论】:

感谢@kalatta 它帮助了我:)

以上是关于注释 ConcurrentHashMap 时,在休眠中“非法尝试将非集合映射为 @OneToMany、@ManyToMany 或 @CollectionOfElements”的主要内容,如果未能解决你的问题,请参考以下文章

并发容器ConcurrentHashMap原理解析及应用

ConcurrentHashmap在我的实现中是否需要同步?

Java并发:并发集合ConcurrentHashMap的源码分析

ConcurrentHashMap源码解析_04 transfer方法源码分析(难点)

ConcurrentHashMap源码解析_04 transfer方法源码分析(难点)

ConcurrentHashMap是如何提高并发时的吞吐性能