【发布时间】:2009-11-17 15:45:05
【问题描述】:
我正在尝试使用外键和固定值作为键/映射参数来映射(映射类型的)集合。
我有几个产品类型表和一个包含产品名称等内容的语言表。
现在假设我们有一个附件表,其中包含(显然)附件,然后附件的名称存储在语言表中,其中 language.id = accessory.id 和 language.type='accessory'。 map-key 应该是 language.lang 字段,一个语言代码字符串。
现在,无论我尝试了什么,我都无法正确使用“language.type='accessory'”部分,不喜欢多个关键元素,这反过来又不允许元素。
我也尝试使用复合组件作为 foreignKey,默认设置常量,但这也没有真正起作用:
<class name="AccessoryTypes"
table="accessorytypes">
<id name="id" column="id" type="java.lang.Long" unsaved-value="0">
<generator class="identity"></generator>
</id>
<map name="Name" table="ProductCode">
<key column="CompositeId" />
<map-key column="Language" type="string" />
<one-to-many class="ProductCode" />
</map>
</class>
<class name="Language"
table="Language">
<composite-id name="compositeId" class="languageKey">
<key-property name="Type"></key-property>
<key-property name="Id"></key-property>
</composite-id>
<property name="Lang" type="string"></property>
<property name="Value"></property>
</class>
当然有适当的类。这种方法不会报错,但也不会填充 Accessory 类的 HashMap...
任何帮助将不胜感激,谢谢。
[编辑] 我现在按照 ziodberg 的建议使用 property-ref 进行了尝试,首先使用 not with 这样的:
<class name="AccessoryTypes"
table="accessorytypes">
<id name="id" column="id" type="java.lang.Long" unsaved-value="0">
<generator class="identity"></generator>
</id>
<properties name="CompositeId" >
<property name="id" />
<property name="Type" formula="'accessory'" />
</properties>
<map name="Name" table="ProductCode">
<key property-ref="CompositeId" />
<map-key column="Language" type="string" />
<one-to-many class="ProductCode" />
</map>
</class>
和
<class name="com.swissclick.wesco.web.model.ProductCode"
table="ProductCode">
<composite-id class="com.swissclick.wesco.web.model.ProductCodeKey" mapped="true">
<key-property name="Type"></key-property>
<key-property name="id"></key-property>
</composite-id>
<property name="Language" type="string"></property>
<property name="Value"></property>
</class>
但这也不起作用,它给了
org.hibernate.MappingException: collection foreign key mapping has wrong number of columns: AccessoryTypes.Name type: component[Id,Type]
这不会在谷歌上找到任何有用的信息。
有什么想法吗?
【问题讨论】:
-
会不会是因为在您的收藏中您引用了 column="compositeId" 使用 property-ref="compositeId" 怎么样?
标签: hibernate map collections key