Как правильно сопоставить 2 индивидуальные ассоциации в Hibernate - PullRequest
0 голосов
/ 03 мая 2011

В настоящее время я пытаюсь создать два простых сопоставления «один к одному» с использованием 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, так что не бей меня слишком сильно за очевидные ошибки: -)

1 Ответ

2 голосов
/ 03 мая 2011

Предлагаю взглянуть на главу Сопоставление ассоциаций в справочном руководстве по Hibernate. Для двунаправленного взаимно-однозначного отображения предлагается использовать <one-to-one> на одном конце и <many-to-one unique="true"> на другом конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...