Я пытаюсь сопоставить коллекцию (карты типов), используя внешний ключ и фиксированное значение в качестве аргументов ключа/сопоставления.
У меня есть несколько таблиц типов продуктов и языковая таблица, в которой хранятся такие вещи, как названия продуктов и так далее.
Теперь предположим, что у нас есть таблица аксессуаров, которая содержит (очевидно) аксессуары, тогда имя аксессуара сохраняется в языковой таблице с помощью 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...
любая помощь будет оценена, спасибо.
[править] Теперь я попробовал это со свойством-ссылкой, как предложил Зиодберг, сначала с не таким:
<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.
Любые идеи?