加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何映射地图

发布时间:2020-12-14 16:45:14 所属栏目:Java 来源:网络整理
导读:我试过了 @ManyToMany(cascade = CascadeType.ALL)MapString,Double data = new HashMapString,Double(); 但它会产生错误: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.company.Klass.data[jav
我试过了
@ManyToMany(cascade = CascadeType.ALL)
Map<String,Double> data = new HashMap<String,Double>();

但它会产生错误:

org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.company.Klass.data[java.lang.Double]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1016)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:567)
at org.hibernate.cfg.annotations.MapBinder$1.secondPass(MapBinder.java:80)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)

任何想法?

解决方法

那么,错误信息很清楚:Double不是一个实体.如果要映射基本元素的集合,请使用CollectionOfElement注释(来自Hibernate)或ElementCollection注释(来自JPA 2.0).

所以,假设你使用Hibernate Annotations 3.4,尝试这样做:

@CollectionOfElements(targetElement = Double.class)
@org.hibernate.annotations.MapKey(targetElement = String.class)
Map data;

或者,当使用泛型:

@CollectionOfElements
Map<String,Double> data;

如果您使用Hibernate Annotations 3.5,则更喜欢JPA 2.0注释:

@ElementCollection(targetClass = Double.class)
@MapKeyClass(String.class)
Map data;

或者,当使用泛型:

@ElementCollection
Map<String,Double> data;

参考

> Hibernate注释3.4参考指南

> 2.4.6.2.2. Map
> 2.4.6.2.5. Collection of element or composite elements

> JPA 2.0规范

> Section 11.1.12“ElementCollection Annotation”
>第11.1.28节“MapKeyClass注释”

Do you know how to customize the “ELEMENT” and “MAPKEY” column names ?

您可以完全自定义结果.我认为下面的示例演示了一切:

@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;

>使用JoinTable定义Map的集合表的名称

>使用JoinTable中的JoinColumn设置父对象的列的名称

> MapKey中定义了地图键的列名>使用列定义地图值的列的名称

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读