JPA ElementCollection Map <integer,entity =“”> </integer,>

时间:2015-04-10 10:27:18

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

我需要将地图的值分配给我的实体,但是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;
}

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

1 个答案:

答案 0 :(得分:1)

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

  • Map<Basic,Basic>
  • Map<Basic,Embeddable>
  • Map<Embeddable,Basic>
  • Map<Embeddable,Embeddable>
  • Map<Entity,Basic>
  • Map<Entity,Embeddable>

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

  • Map<Basic,Entity>(这是你的情况)
  • Map<Embeddable,Entity>
  • Map<Entity,Entity>

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

@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之间的双向关联是可选的,但删除它会在数据库中创建一个额外的表。