What I personally like to do is to give the relationship table its own primary key and do the mapping as below:
Code:
<hibernate-mapping>
<class name="core.languagedata.LanguageData" table="HTL_LANGUAGE_DATA" lazy="false">
<id name="id" column="id"..../>
<property name="name" column="HLD_NAME" type="java.lang.String" />
<property name="description" column="HLD_DESCRIPTION" type="java.lang.String" />
<many-to-one name="language" column="HLD_LANG_ID" />
<many-to-one name="hotel" column="HLD_HOTL_ID" />
</class>
</hibernate-mapping>
and for both language and hotel you will have a one-to-many to LanguageData:
Code:
....
<set name="languageData" table="xyz" ...>
<key column="HLD_LANG_ID"/>
<one-to-many class="LanguageData" .../>
</set>
However, if you have to keep teh relationship table's schema as it is then you might want to use <key-many-to-one name="propertyName class="ClassName" column="column_name"/>:
Code:
<hibernate-mapping>
<class name="core.languagedata.LanguageData" table="HTL_LANGUAGE_DATA" lazy="false">
<composite-id>
<key-many-to-one name="language" class="Language" column="HLD_LANG_ID"/>
<key-many-to-one name="hotel" class="Hotel" column="HLD_HOTL_ID"/>
</composite-id>
<property name="name" column="HLD_NAME" type="java.lang.String" />
<property name="description" column="HLD_DESCRIPTION" type="java.lang.String" />
</class>
</hibernate-mapping>
and the many-to-one sides on both Hotel and Language stays the same.
Farzad-