大家好,我有一张下面的 map *,这给我带来了很多麻烦:
Map<MetricSourceInterface, AliasesInterface>
MetricSourceInterface 是一个具有简单属性的实体。 AliasesInterface 是一个只有一个 Id 和一个字符串列表的实体。
Hibernate 正在创建数据库模式,因此无论如何更改它都没有问题。
旁注,这是尝试映射的子问题:
Map<MetricSourceInterface, List<String>>
有谁知道解决这个问题的正确方法吗?
对此只有一个限制,我不想为 AliasesInterface 或 List 创建 UserType
提前致谢:)
*使用 pstanton 的更正进行了编辑 :)
最佳答案
只要 AliasesInterface
在 Hibernate 意义上确实是一个实体,映射这个就真的没有问题:
@OneToMany(targetEntity=AliasInterface.class)
@MapKeyManyToMany(targetEntity=MetricSourceInterface.class, joinColumns=@JoinColumn(name="metric_source_id"))
private Map<MetricSourceInterface, AliasesInterface> myMap;
请注意,上面假设 AliasInterface
和 MetricSourceInterface
都是实体;如果它们确实是接口(interface),您将需要引用它们的具体实现。
请记住,@MapKeyManyToMany
是对 JPA 的 Hibernate 扩展。有关 mapping collections are in Hibernate docs 的更多详细信息/示例.
更新:使用 XML 映射文件的相同方法:
<map name="myMap">
<key column="owner_id"/> <!-- FK to owner entity table -->
<map-key-many-to-many column="metric_source_id" class="MetricSourceInterface"/>
<one-to-many class="AliasesInterface"/>
</map>
关于java - 使用 Hibernate 映射 Map<Interface,Interface>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943659/