if you give the association a surrogate id, you can map it with something like:
Code:
<hibernate-mapping>
<class name="Part" table="part">
<id name="id" column="id">
<generator class="sequence"\>
</id>
<set name="RecommendParts" cascade="all" inverse="true">
<key column="part_id"/>
<one-to-many class="RecommendPart"/>
</set>
</class>
<class name="Manufacturer" table="manufacturer">
<id name="id" column="id">
<generator class="sequence"\>
</id>
<set name="RecommendParts" cascade="all" inverse="true">
<key column="manufacturer_id"/>
<one-to-many class="RecommendPart"/>
</set>
</class>
<class name="Category" table="category">
<id name="id" column="id">
<generator class="sequence"\>
</id>
<set name="RecommendParts" cascade="all" inverse="true">
<key column="category_id"/>
<one-to-many class="RecommendPart"/>
</set>
</class>
<class name="RecommendPart" table="RecommendParts">
<id name="id" column="id">
<generator class="sequence"\>
</id>
<many-to-one name="manufacturer" class="Manufacturer" column="manufacturer_id"/>
<many-to-one name="part" class="Part" column="part_id"/>
<many-to-one name="category" class="Category" column="category_id"/>
</class>
</hibernate-mapping>
If you prefer to use as the PK of the association the key composed with the FK of the other three tables, you can use a <composite_id>.