Проблема в отображении отношения многие-к-одному в Hibernate - PullRequest
0 голосов
/ 24 марта 2011

Относительно моего предыдущего поста Предыдущее сообщение

У меня есть родительская таблица A и ее дочерняя таблица B. Отношение A к B однозначно, а с B к A - много к одному. Мне нужно извлечь данные из таблицы B на основе его родительского идентификатора, для которого я пытался использовать именованный запрос, вот обновленный файл hbm для дочерней таблицы.

<hibernate-mapping>
    <class
        name="ChildClass"
        table="B">
        <id name="uuid" type="java.lang.String">
            <column name="UUID" />
            <generator class="uuid" />
        </id>
        <!-- <version name="version" column="OBJ_VERSION" /> -->
        <many-to-one name="A"
            class="ParentClass" fetch="join">
            <column name="PARENTID" />
        </many-to-one>
       <property name="parentid" type="java.lang.String" update="false"          insert="false">
            <column name="PARENTID" />
        </property>
    </class>
</hibernate-mapping>

Начальная идея добавить

   <property name="parentid" type="java.lang.String" update="false" insert="false">
<column name="PARENTID" />
                </property>

должен был использовать именованный запрос гибернации, основанный на парентиде. Что-то вроде этого

<hibernate-mapping>
    <query name="getChildRecordsByParentID">
        from Child child where child.parentid = :parentid     
</query>
</hibernate-mapping>

и я смог достичь этого, но столкнулся с серьезной проблемой. Иногда я хочу обновить дочернюю таблицу на основе парентиды, поэтому я просто выбирал родительский объект на основе парентиды и использовал ее ссылку в дочерней сущности пытался сохранить дочерний экземпляр, все сохранялось должным образом, кроме парентиды, которая была установлена ​​как "null" я думаю null устанавливается так, как я сделал парентиду только для чтения

Я только начинающий пользователь Hibernate, поэтому не уверен, где именно я делаю ошибку в отображении, поскольку изменение файла сопоставления приводит к прекращению работы второй функциональности.

Любая помощь в этом отношении будет очень полезна.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Как вы пытаетесь связать ребенка с данным родителем?

Поскольку ваше свойство parentId равно update="false" insert="false", это свойство полностью игнорируется с точки зрения обновления (оно используется как свойство только для чтения, когда update / insert имеет значение false).

Похоже, вы отображаете родителя как A, поэтому, чтобы установить родителя для ребенка, вам нужно всего лишь вызвать child.setA(parent); и сохранить дочернего элемента.

0 голосов
/ 24 марта 2011

Это была какая-то глупая ошибка с моей стороны или, честно говоря, отсутствие отладки. Способна решить проблему, так как идентификатор, по которому я выбирал моего родителя, был неверным и, следовательно, ноль отправлялся.

Спасибо Шон за ценные материалы.

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