我已经阅读了本论坛中有关如何使用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.
但他们没有解释如何使用明确的密钥。
答案 0 :(得分:0)
@MapKey(columns = {@Column(name = "mapkeycolumn")} , targetElement = BaseFilter.class)
使用泛型集合时,targetElement是可选的