根据Hibernate文档,如果我们想要在实体之间使用Map作为关联,则有多个可用注释。文档说:
或者将映射键映射到专用列。为了自定义映射,请使用以下注释之一:
- @MapKeyColumn 如果映射键是基本类型。如果您不指定列名,则使用属性名称后跟下划线再跟KEY的名称(例如orders_KEY)。 - @MapKeyEnumerated/@MapKeyTemporal 如果映射键类型分别为枚举或日期。 - @MapKeyJoinColumn/@MapKeyJoinColumns 如果映射键类型是另一个实体。 - @AttributeOverride/@AttributeOverrides 当映射键是可嵌入对象时。使用key.作为您的可嵌入对象属性名称的前缀。如果您不使用泛型,则还可以使用@MapKeyClass定义键的类型。
通过一些示例,我理解@MapKey仅用于将键映射到目标实体的属性,并且此键仅用于获取记录。而@MapKeyColumn用于将键映射到目标实体的属性,并且此键用于保存和获取记录。如果我的理解正确,请告诉我。
或者将映射键映射到专用列。为了自定义映射,请使用以下注释之一:
- @MapKeyColumn 如果映射键是基本类型。如果您不指定列名,则使用属性名称后跟下划线再跟KEY的名称(例如orders_KEY)。 - @MapKeyEnumerated/@MapKeyTemporal 如果映射键类型分别为枚举或日期。 - @MapKeyJoinColumn/@MapKeyJoinColumns 如果映射键类型是另一个实体。 - @AttributeOverride/@AttributeOverrides 当映射键是可嵌入对象时。使用key.作为您的可嵌入对象属性名称的前缀。如果您不使用泛型,则还可以使用@MapKeyClass定义键的类型。
通过一些示例,我理解@MapKey仅用于将键映射到目标实体的属性,并且此键仅用于获取记录。而@MapKeyColumn用于将键映射到目标实体的属性,并且此键用于保存和获取记录。如果我的理解正确,请告诉我。
另外,请告诉我何时需要使用@MapKeyJoinColumn / @MapKeyJoinColumns和@MapKeyEnumerated / @MapKeyTemporal。
谢谢!
@MapKey
没有给我期望的结果。你能否也看一下这个链接:https://dev59.com/1Izda4cB1Zd3GeqPprCU?^^ - Stefan Falkhibernate 3.3.2
迁移到hibernate 4.3.11
。如何迁移@MapKey
,因为在hiberante4
中无法解析 MapKey 类型。 - macemers