спящий ключ, отображающий внешний ключ в первичном ключе на альтернативный ключ - PullRequest
2 голосов
/ 07 ноября 2011

У меня есть 3 таблицы:

Account
{
Long account_id; // primary key, alternate key field 1
Long client_id;  // alternate key field 2
...
}

Admin
{
Long office_id;  // primary key field 1
Long account_id; // primary key field 2
Long client_id;
}

Office
{
Long office_id; // primary key
...
}

Таким образом, таблица Admin ссылается на таблицу Account по альтернативному ключу (account_id, client_id). Я пытаюсь написать сопоставление для него, но не могу понять, как.

У меня сейчас:

<class name="Account" table="Account">
    <id name="id">
        <column name="account_id" not-null="true"/>
    </id>
    <properties name="account_ak1" unique="true">
        <property name="id" column="account_id" insert="false" update="false"/>
        <property name="client" column="client_id" insert="false" update="false"/>
    </properties>
    <many-to-one name="client" class="Client" column="client_id" lazy="false" fetch="join"/>
...
</class>

<class name="Admin">
    <composite-id name="id" class="KeyPair">
        <key-many-to-one name="t1" class="Office" column="office_id" lazy="false"/>
        <key-many-to-one name="t2" class="Account" lazy="false" column="account_id"/>
    </composite-id>
    <many-to-one name="account" class="Account" not-null="true" insert="false" update="false" lazy="false" fetch="join" property-ref="account_ak1">
        <column name="account_id"/>
        <column name="client_id"/>
    </many-to-one>
</class>

Проблема заключается в том, что я не могу установить client_id в sql update / insert таким образом, и я не могу установить только account_id для вставки / обновления false ни внутри составного идентификатора, ни в пределах многих к одному. Также я попытался включить все поля учетной записи в первичный ключ.

    <composite-id name="id" class="KeyPair">
        <key-many-to-one name="t1" class="Office" column="office_id" lazy="false"/>
        <key-many-to-one name="t2" class="Account" lazy="false"/>
           <column name="account_id"/>
           <column name="client_id"/>
        </key-many-to-one>
    </composite-id>

но ключ-многие-к-одному может ссылаться только на первичный ключ учетной записи и не принимает свойство-ref. Как это решить?

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