Hibernate XML - составной идентификатор с отображением один-к-одному - PullRequest
1 голос
/ 27 июня 2019

Я не могу заставить его работать. Ошибка говорит Broken column mapping. Это должно быть одностороннее однозначное сопоставление. Только 1 часть составного идентификатора связана с другим объектом. Канал будет вставлен на основе канала доступа зарегистрированного пользователя. У меня есть 2 класса.

public class UserModel implements Serializable{
    private final Long id;
    private final UserLimitsModel userLimitsModel;

}
public class UserLimitsModel implements Serializable{
    private final Long userId;    
    private final String channel;
}

Затем 2 hibernate .xml сопоставления

<hibernate-mapping>
    <class name="abcdefgh.UserLimitsModel" table="USER_LIMITS" lazy="false">
        <composite-id>
            <key-property name="userId" type="long">
                <column name="USER_ID" not-null="true"/>
            </key-property>
            <key-property name="channel" type="string" length="20">
                <column name="CHANNEL" not-null="true"/>
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="abcdefgh.UserModel" table="USER" lazy="false">
        <id name="id" type="long">
            <column name="ID" precision="19" scale="0" />
            <generator class="sequence">
                <param name="sequence_name">ID_SEQ</param>
            </generator>
        </id>
        <one-to-one name="userLimitsModel" class="abcdefgh.UserLimitsModel" cascade="all"/>
    </class>
</hibernate-mapping>

Таким образом, единственное соединение - UserModel.id = UserLimitsModel.userId, в то время как канал остается отдельным.

1 Ответ

1 голос
/ 27 июня 2019

Привет, проблема в том, что вы не присоединяетесь с первичным ключом.Также имя столбца в UserModel - это ID, а в UserLimitsModel - это USER_ID.Вы должны указать hibernate, как выполнить объединение, вы можете сделать это, задав свойство ref для элемента «один к одному».

<one-to-one name="userLimitsModel" class="abcdefgh.UserLimitsModel" property-ref="userId" cascade="all"/>

property-ref (необязательно): имясвойство связанного класса, которое присоединяется к первичному ключу этого класса.Если не указан, используется первичный ключ связанного класса.

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