映射java.util.map<;实体,实体>;在hibernate中使用JPA注释

映射java.util.map<;实体,实体>;在hibernate中使用JPA注释,hibernate,jpa,map,annotations,Hibernate,Jpa,Map,Annotations,我似乎在hibernate中映射集合时遇到了问题,其中键和资源都是hibernate要映射的实体 然而,从文档来看(我在这个问题上的主要资源是这个,但我当然欢迎其他人:),这似乎应该是一个相对简单的任务,我似乎无法保持地图的关键 目前我的代码如下所示: 父类: @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;

我似乎在hibernate中映射集合时遇到了问题,其中键和资源都是hibernate要映射的实体

然而,从文档来看(我在这个问题上的主要资源是这个,但我当然欢迎其他人:),这似乎应该是一个相对简单的任务,我似乎无法保持地图的关键

目前我的代码如下所示:

父类:

@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;
@实体
公共类父类{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@地图键
@MapKeyClass(Key.class)
@多个(级联=级联类型.ALL)
私人地图;
主要类别:

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name = "hierarchyKey")
    private int key;
@Table(name=“ParentKey”)
@实体
公共类密钥实现了可比性{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@列(name=“hierarchyKey”)
私钥;
资源类是一个相对简单的POJO,可以很好地保持,因此我假设问题不在该类中

我确实在hibernate论坛的一些文档中遇到了@MapKeyManyToMany注释,但我相信这已经被弃用了

在这个阶段,数据库的模式并不重要,主要关注的是确保所有内容都保存到数据库中

我相信您可能会猜到,任何涉及单词map、hibernate、entity和key的搜索都会返回大量与此问题无关的问题,尽管我相信这一定是在映射情况下经常发生的情况


我不经常提交问题,但我是一个积极的读者,因此如果需要更多信息,请告诉我。

这是按照规定进行的。操作不会级联到映射的键。它们只级联到值。在这方面,请用以下文字说明:

当目标集合是java.util.Map时,cascade元素 应用于贴图值


密钥必须单独持久化。

@axtavt当资源持久化到数据库时,也应该持久化的密钥不会。这无疑让我走上了正确的道路,你知道一种方法可以以与值相同的方式持久化密钥吗?这当然有帮助,虽然不是一个完整的解决方案,但确实塑造了e的路径我实现了一个虚拟解决方案,谢谢。我最终进行了重构,使密钥的类型为Integer,它可以通过级联很好地保持。