在JPA中映射复杂的Map

时间:2015-03-21 00:15:25

标签: java hibernate jpa persistence

我无法获得具有如下字段的实体的持久性:

private Map<String, List<String>> filterValueRange;

到目前为止我已经尝试过:

@ElementCollection
    @JoinTable(name="ATTRIBUTE_VALUE_RANGE", joinColumns=@JoinColumn(name="ID"))
    @MapKeyColumn (name="Filter_Id")
    @Column(name="FILTER")
    private Map<String, List<String>> filterValueRange;

但似乎仍然缺少一些东西。

有人能指出我正确的方向吗?

我使用jpa作为界面,但是引擎盖下有Hibernate。

谢谢!

2 个答案:

答案 0 :(得分:0)

我不相信这是可能的。您要实现的是映射元素集合的元素集合。

如果我错了,你应该使用 @CollectionTable注释定义你的连接表。

但我认为你需要定义代表值范围的Embedable并拥有自己的ElementCollection值。您可以将此embedable映射到filterValueRange并通过它访问值列表。

如果您不需要通过filterValueRange进行查询,则可以将其序列化为Blob。

答案 1 :(得分:0)

JPA不支持映射嵌套集合关系,但您可以通过稍微更改对象模型来轻松解决此问题,例如:

@OneToMany(mappedBy = "parent")
@MapKeyColumn (name="Filter_Id")
private Map<String, ValueRange> filterValueRange;

并在相应的ValueRange实体中:

@ManyToOne
private Parent parent;

或者您也可以查看以下帖子: