1

大家好,我有一张以下地图*,这给我带来了很多麻烦:

Map<MetricSourceInterface, AliasesInterface>

MetricSourceInterface 是一个具有简单属性的实体。AliasesInterface 是一个只有一个 Id 和一个字符串列表的实体。

Hibernate 正在创建数据库模式,因此无论如何更改它都没有问题。

在旁注中,这是尝试映射的一个子问题:

Map<MetricSourceInterface, List<String>>

有谁知道解决这个问题的正确方法?

对此只有一个限制,我不想为 AliasesInterface 或 List 创建 UserType

提前谢谢:)


*编辑了 pstanton 的更正 :)

4

1 回答 1

4

只要AliasesInterface确实是 Hibernate 意义上的实体,映射这个就没有问题:

@OneToMany(targetEntity=AliasInterface.class)
@MapKeyManyToMany(targetEntity=MetricSourceInterface.class,  joinColumns=@JoinColumn(name="metric_source_id"))
private Map<MetricSourceInterface, AliasesInterface> myMap;

请注意,以上假设AliasInterfaceMetricSourceInterface都是实体;如果它们确实是接口,则需要参考它们的具体实现。

请记住,这@MapKeyManyToMany是 JPA 的 Hibernate 扩展。有关映射集合的更多详细信息/示例在 Hibernate 文档中。

更新:使用 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>

此处有更多详细信息,此处还有其他示例

于 2009-12-22T01:31:25.187 回答