java – 如何映射地图
我试过了
@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 > JPA 2.0规范 > Section 11.1.12“ElementCollection Annotation”
您可以完全自定义结果.我认为下面的示例演示了一切: @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中定义了地图键的列名>使用列定义地图值的列的名称 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |