【问题标题】:Mapping a java.util.map<entity, entity> in hibernate using JPA annotations使用 JPA 注释在休眠中映射 java.util.map<entity, entity>
【发布时间】:2012-09-05 16:04:08
【问题描述】:

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

从文档来看(我在这个问题上的主要资源是这个,但我当然欢迎任何其他资源: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;

关键类:

@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 的搜索都会返回大量与此问题无关的问题,尽管我确信这一定是一种相当普遍的情况通常在映射情况方面。

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

【问题讨论】:

  • @axtavt 虽然资源可以很好地保存到数据库中,但也应该保存的密钥却没有。

标签: hibernate jpa map annotations


【解决方案1】:

这按规定工作。操作不会级联到映射的键。它们仅级联到值。在documentation 中是这样说的:

当目标集合是 java.util.Map 时,级联元素 适用于地图值。

密钥必须单独持久化。

【讨论】:

  • 这绝对让我走上了正轨,你知道有一种方法可以以与值相同的方式持久保存键吗?
  • 这当然有帮助,虽然不是一个完整的解决方案,但确实塑造了我实施的最终解决方案的路径,谢谢。我最终进行了重构,以便密钥是整数类型,它在级联中保持良好。
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 2021-05-17
  • 2019-06-10
  • 2017-06-06
  • 2011-09-11
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多