2012-09-12 234 views
2

我似乎在映射hibernate中的集合时存在问题,其中密钥和资源都是由hibernate映射的实体。使用JPA批注在Hibernate中映射java.util.map <实体,实体

从文档(我的这个问题的主要资源一直是这个,但我当然欢迎任何其他:http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html)它会出现这应该是一个相对简单的任务,我似乎无法得到要坚持的地图的关键。

,因为它代表我的代码如下所示:

父类:

@Entity 
public class Parent { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    @MapKey 
    @MapKeyClass(Key.class) 
    @ManyToMany(cascade = CascadeType.ALL) 
    private Map<Key, Resource> map; 

Key类:

@Table(name="ParentKey") 
@Entity 
public class Key implements Comparable<Key> { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 
    @Column(name = "hierarchyKey") 
    private int key; 

的资源类是一个相对简单的POJO和持续正常,所以我会认为这个问题不在这个班上。

我在hibernate论坛的某些文档中遇到了批注@MapKeyManyToMany,但我相信这已经被弃用了。

在这个阶段数据库的架构并不重要,主要关心的是简单地确保一切都保留在数据库中。我们使用MySQL作为底层数据库。我相信你可以猜到,任何涉及单词map,hibernate,entity和key的搜索都会返回大量与这个问题无关的问题,尽管我相信这肯定是一种发生的情况通常在映射情况方面。

我不经常提交问题,但我是一名活跃的读者,所以如果需要更多信息,请告诉我。

+0

究竟是什么问题? – axtavt

+0

@axtavt虽然资源仍然保留在数据库中,但该键也应该保留,而不是。 –

回答

1

这按照指定的方式工作。操作不会级联到地图的关键。它们只与价值级联。在documentation这种杂糅了下面的话:

当目标集合是一个java.util.Map,级联元素 适用于映射值。

密钥必须单独保存。

+0

这确实使我走上了正确的轨道,你知道有一种方法来坚持与价值相同的方式的关键? –

+0

这当然有帮助,虽然不是一个完整的解决方案,但确实形成了我实施的最终解决方案的路径,谢谢。 我最终重构了键,使Integer类型的键能够保持级联。 –