J'essaie de mapper une collection (de type map) en utilisant une clé étrangère et une valeur fixe comme arguments key/mapping.Collection de cartes Hibernate avec clé constante
J'ai plusieurs tables de types de produits et une table de langue qui contient des choses comme des noms de produits et ainsi de suite.
Disons maintenant que nous avons une table d'accessoires qui contient (évidemment) des accessoires, alors le nom d'un accessoire est stocké dans la table de langue avec language.id = accessory.id et language.type = 'accessory'. La clé de la carte doit être le champ language.lang, une chaîne de code de langue. Maintenant, peu importe ce que j'ai essayé, je ne peux pas obtenir la partie "language.type = 'accessory'" juste, n'aime pas l'élément clé multiple, ce qui à son tour ne permettrait pas les éléments de toute façon .
J'ai aussi essayé avec un composant composite foreignKey, avec l'ensemble constant par défaut, mais cela n'a pas vraiment travailler soit:
<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>
bien sûr avec les classes appropriées. Cette approche ne donne aucune erreur, mais ne remplit pas non plus la HashMap de la classe Accessory ...
toute aide serait appréciée, merci.
[modifier] maintenant je l'ai essayé avec property-ref comme ziodberg suggéré, d'abord avec un pas comme celui-ci:
<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>
et
<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>
mais cela ne fonctionne pas, soit, il donne
org.hibernate.MappingException: collection foreign key mapping has wrong number of columns: AccessoryTypes.Name type: component[Id,Type]
ce qui ne donne aucune information utile sur google.
des idées?
Serait-ce parce que dans votre collection votre référence à column = "compositeId" Que diriez-vous d'utiliser property-ref = "compositeId" à la place? – Zoidberg