Это зависит от того, какова ваша структура класса или что вы ищете в структуре класса. Если это действительно единственные столбцы в таблицах, то этот способ кажется излишним и создает некоторые неоптимальные способы доступа к X & Y (classC.A.X & classC.B.X), но это будет работать. Возможно, у вас могли бы быть некоторые несохраненные свойства в ClassC, которые сделали бы эти вызовы более лаконичным способом.
<class name="ClassA" table="A">
<id name="Id" column="ID">
<generator class="native"/>
</id>
<property name="x" column="X" />
</class>
<class name="ClassB" table="B">
<id name="Id" column="ID">
<generator class="native"/>
</id>
<property name="y" column="Y" />
</class>
<class name="ClassC" table="C">
<id name="Id" column="ID">
<generator class="native"/>
</id>
<many-to-one name="A" class="ClassA" column="A_ID"/>
<many-to-one name="B" class="ClassB" column="B_ID"/>
</class>
Если в С есть только эти столбцы, вы можете изменить это, чтобы использовать составной идентификатор (см. документы ). Затем, также в зависимости от ваших потребностей, вы можете настроить каскадирование так, чтобы вы когда-либо связывались с ClassC только до CRUD.