9

私は試した

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

何か案が?

4

1 に答える 1

23

エラー メッセージは非常に明確です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;

参考文献


「ELEMENT」と「MAPKEY」の列名をカスタマイズする方法を知っていますか?

結果を完全にカスタマイズできます。以下のサンプルはすべてを示していると思います。

@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;
  • のコレクション テーブルの名前はMapJoinTable
    • 親へのキーの列の名前はJoinColumnJoinTable
  • マップのキーの列の名前は、MapKey
  • マップの値の列の名前は、Column
于 2010-10-08T01:09:44.673 に答える