【问题标题】:JPA ElementCollection Map<Integer, Entity>JPA ElementCollection Map<整数,实体>
【发布时间】:2015-06-16 00:49:22
【问题描述】:

我需要将映射的值分配给我的实体,但 jpa 尝试将孔对象保存为字节数组。

@Entity
public class ImageSet {
    ...
    @ElementCollection
    private Map<Integer, Image> images = new LinkedHashMap<>();
}

@Entity
public class Image {
    ...
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

我认为这并不难,但我在网上找不到任何示例。请你帮助我好吗?非常感谢!

【问题讨论】:

  • 不确定,但您不需要将类注释为@Entity from javax.persistence.Entity

标签: eclipselink java-ee-7 jpa-2.1 glassfish-4.1


【解决方案1】:

@ElementCollection 注释的关联对以下映射类型有效:

  • Map&lt;Basic,Basic&gt;
  • Map&lt;Basic,Embeddable&gt;
  • Map&lt;Embeddable,Basic&gt;
  • Map&lt;Embeddable,Embeddable&gt;
  • Map&lt;Entity,Basic&gt;
  • Map&lt;Entity,Embeddable&gt;

使用@OneToMany / @ManyToMany 注释的关联对以下映射类型有效:

  • Map&lt;Basic,Entity&gt;(这是你的情况)
  • Map&lt;Embeddable,Entity&gt;
  • Map&lt;Entity,Entity&gt;

根据上述规则,实体可能如下所示:

@Entity
public class ImageSet {
    ...
    @OneToMany(mappedBy="container")
    @MapKey //map key is the primary key
    private Map<Integer, Image> images = new LinkedHashMap<>();
}

@Entity
public class Image {
    ...
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    private ImageSet container;
}

请注意,ImageSet.imagesImage.container 之间的双向关联是可选的,但删除它会在数据库中创建一个额外的表。

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 2013-10-26
    • 2013-01-21
    • 2011-06-25
    • 2021-02-17
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多