В настоящее время я пытаюсь создать два простых сопоставления «один к одному» с использованием Hibernate, но почему-то это не работает так, как я хочу.
Мой основной класс называется MailAccount, и его отображение выглядит так:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated 26.04.2011 14:49:15 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping package="test.account">
<class name="MailAccount" table="MAILACCOUNTS" dynamic-update="true">
<id name="id" column="MAIL_ACCOUNT_ID">
<generator class="native" />
</id>
<one-to-one name="incomingServer" cascade="all" />
<one-to-one name="outgoingServer" cascade="all" />
</class>
</hibernate-mapping>
Файл сопоставления сервера выглядит следующим образом:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 02.05.2011 12:32:52 by Hibernate Tools 3.3.0.GA -->
<hibernate-mapping>
<class name="test.server.MailServer" table="MAILSERVER">
<id name="id" type="long" access="field">
<column name="MAIL_SERVER_ID" />
<generator class="native" />
</id>
<one-to-one name="mailAccount" class="test.account.MailAccount" foreign-key="MAIL_SERVER_ID"></one-to-one>
</class>
</hibernate-mapping>
Теперь, если я позволю Hibernate создавать таблицы, я получу почти то, что хочу: таблицу «MailAccount» со столбцом «MAIL_ACCOUNT_ID» и другую таблицу «MailServer» также со столбцом для идентификатора.
Если я позвоню session.save(mailAccountInstance);
, Hibernate правильно сохранит данные в таблицы.
НО после того, как я пытаюсь загрузить данные в экземпляр MailAccount, Hibernate загружает только свойство «messages» в новый экземпляр MailAccount, а свойство outgoingServer остается пустым.
Я также не понимаю, как Hibernate объединяет обе таблицы, поскольку таблица «MailServer» не сохраняет идентификатор MailAccount, которому принадлежит каждый сервер, в качестве внешнего ключа.
Как я могу это исправить?
Заранее спасибо!
Ps: Я довольно новичок в Hibernate, так что не бей меня слишком сильно за очевидные ошибки: -)