当地图键不是来自实体</string,>时,如何注释Map <string,entity =“”>

时间:2012-03-07 17:23:56

标签: hibernate map

我已经阅读了本论坛中有关如何使用Hibernate注释类型化地图的条目,并且我已经阅读了这里引用的Hibernate文档。他们都没有回答我的问题。我的代码如下:

@OneToMany
@JoinTable(name="administrator_filters")
private Map<String, BaseFilter> filters;

我想使用任意String作为此映射的键,该映射包含BaseFilter对象(它是我的实体之一)并将其存储在连接表中。 Hibernate似乎需要BaseFilter对象的属性作为地图中的键。

我看到以下错误     无法在表'administrator_filters'中的可空列上定义PRIMARY KEY约束。

我在JoinTable和MapKey注释中为JoinColumn元素添加了nullable = false,但我总是得到同样的错误。

我可以向包含地图密钥的BaseFilter添加属性,但我不想这样做。 Hibernate的文档说:

Maps can borrow their keys from one of the associated entity properties or have dedicated columns to store an explicit key.

但他们没有解释如何使用明确的密钥。

1 个答案:

答案 0 :(得分:0)

@MapKey(columns = {@Column(name = "mapkeycolumn")} , targetElement = BaseFilter.class)

使用泛型集合时,targetElement是可选的