Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate + связи


Автор: omka 28.3.2008, 14:17
подскажите, можно ли в Хибере сделать так что бы 2 таблицы связывались с 3-й по одному столбцу. Другими словами хочу что бы одна таблица имела 1 столбец в котором хранилась бы информация о двух других таблицах.
проблема вытекла из того что что есть два класса, которые инкапсулируют в себе 2 разных типа вопроса и есть ещё один класс который инкапсулирует в себе тип ответа. их нужно между собой связать через одно поле question в классе Answer.

Автор: fixxer 28.3.2008, 14:38
непонятно. на пальцах (табличках) покажи.

Автор: omka 28.3.2008, 15:16
лучше на классах:
есть абстрактный класс Question, у него 6 подклассов, 2 из которых SingleChoiceQuestion и MultiSelectQuestion. У этих подклассов есть поле Set<SelectAnswer> possibleAnswers.
есть абстрактный класс AnswerVariant, у него 4 подклассa, 1 из которых SelectAnswer. У класса AnswerVariant есть поле Question question.
Как мне сделать связь в маппинге?

Автор: iluvatar 28.3.2008, 16:34
А какая структура таблиц?
Или ее еще нет?

Автор: omka 28.3.2008, 16:38
Совсем забыл.
Дочерние классы мапились как joined-subclass.

Автор: iluvatar 31.3.2008, 08:06
  Нарисуй структуру таблиц - плясать-то надо от них.
  Какие есть таблицы, с какими полями? Или структура их четко еще не поределена и надо их создать?

Автор: omka 31.3.2008, 14:31
изменил маппинги (joined-subklass на subclass),  но от этого проблемма не решилась.
Таблицы:
user posted image

Получается ссылка на одно поле QUESTION_ID.

Вот куски маппингов:

Question.hbm.xml
Код

        <subclass name="SingleChoiceQuestion"
            discriminator-value="SCQ">
            <set name="possibleAnswers">
                <key column="QUESTION_ID" />
                <one-to-many
                    class="AnswerVariant" />
            </set>
        </subclass>

        <subclass name="MultiSelectQuestion"
            discriminator-value="MSQ">
            <set name="possibleAnswers">
                <key column="QUESTION_ID" />
                <one-to-many
                    class="AnswerVariant" />
            </set>
        </subclass>




Answer.hbm.xml
Код


<many-to-one name="question" cascade="save-update"
            class="Question" column="QUESTION_ID" />

        <subclass name="SelectAnswer"
            discriminator-value="SA">
            <property name="right" type="string" length="1"
                column="IS_RIGHT" />
        </subclass>

        <subclass name="StringAnswer"
            discriminator-value="STRA">
            <property name="correctString" type="string"
                column="STRING_ANSWER" />
        </subclass>


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)