Я пытаюсь отобразить коллекцию (типа map), используя внешний ключ и фиксированное значение в качестве аргумента ключ / отображение.
У меня есть несколько таблиц типов продуктов и языковая таблица, содержащая такие вещи, как названия продуктов и т. Д.
Теперь предположим, что у нас есть таблица аксессуаров, которая содержит (очевидно) аксессуары, тогда имя аксессуара сохраняется в языковой таблице с помощью language.id = accessory.id и language.type = 'accessory'.
Ключ карты должен быть полем 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>
конечно с соответствующими классами. Этот подход не дает ошибок, но также не заполняет HashMap класса Accessory ...
любая помощь будет оценена, спасибо.
[править]
Теперь я попробовал это с помощью свойства ref, как предложил Зиодберг, сначала не с таким:
<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]
, которая не выдает никакой полезной информации в Google.
есть идеи?