java - 使用 Hibernate 映射 Map<Interface,Interface>

标签 java hibernate hbm

大家好,我有一张下面的 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;

请注意,上面假设 AliasInterfaceMetricSourceInterface 都是实体;如果它们确实是接口(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>

more details hereother examples here .

关于java - 使用 Hibernate 映射 Map<Interface,Interface>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943659/

相关文章:

java - String[] 或 ArrayList 更适合作为 HashMap 中的 Key?

java 。 String 内的 if 语句作为函数参数

java - 如何使 Java 中的自定义泛型类型链表排序?

java - 更改参数数量后的 hibernate ConstraintViolationException

java - hibernate 5.2 : how to map set of enums by name using hbm file

NHibernate - 非法访问加载集合

java - 函数内部的paintComponent

mysql - 如何使用 Hibernate 从 mysql 获取单个记录的计数

java - Hibernate:如何返回map<String,List<Object>>

java - hibernate中查询语法异常