При помощи элемента join можно сделать маппинг свойств одного класса на столбцы нескольких таблиц, отношение между которыми один-к-одному (one-to-one).

Например:

<class name="Person" table="PERSON">

 <id name="id" column="PERSON_ID">...</id>

 <join table="ADDRESS">
 <key column="ADDRESS_ID"/>
 <property name="address"/>
 <property name="zip"/>
 <property name="country"/>
 </join>
</class>

У элемента join могут быть следующие свойства:

  • table – название таблицы
  • schema – переопределяет имя схемы, указываемое в корневом элементе Hibernate-mapping
  • catalog – переопределяет имя каталога, указываемое в корневом элементе Hibernate-mapping
  • fetch – задает способ извлечения данных. По умолчанию join, т.е. для извлечения данных будет использоваться inner join, если элемент join определен в текущем классе или в родительском классе. Если элемент join определен в потомке (в элементе subclass), то для извлечения данных будет применяться outer join. Если в свойстве fetch указано значение select, то ,если строка результата является подклассом данного класса, будет для извлечения данных подкласса использоваться дополнительный запрос. Для элементов join определенных в классе или его родителе все-равно будет использоваться inner join.
  • inverse – если inverse = true, то при обновлении/вставке соответствующих свойств класса, будут обновдяться/добавляться записи в соответствующих таблицах
  • optional – если optional = true, то запись в связанную таблицу будет добавлена только если хотя бы одно из свойств в классе не null