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


Автор: greef 20.12.2007, 14:22
Доброго времени суток. Знакомлюсь с Hibernate. Прошу помощи с mapping.

Есть следующая бд (2 таблицы):

Voting:
1) Questions (QuestionID, Question);
2) Answers (AnswerID, Answer, Sum, QuestionID).
И связь один-ко-многим.

Web-голосование, с 2 таблицами - в первой содержиться список вопросов, во второй ответы + количество голосов по каждому.

Тогда hibernate mapping будет для Question будет следующим
Код

<hibernate-mapping>
    
    <class name="com.test.Question" table="Questions">
        <id name="id" column="QuestionID" unsaved-value="0">
            <generator class="increment"/>
        </id>
        <property name="question" column="Question"/>

        <set name="answers">
            <key column="Question"/>
            <one-to-many 
                class="com.test.Answer"/>
        </set>
    </class>

</hibernate-mapping>
 

hibernate mapping для Answer будет следующим 

Код

<hibernate-mapping>

    <class name="org.com.Answer" table="Answers">

        <id name="id" column="AnswerID" unsaved-value="0">
            <generator class="increment"/>
        </id>
        <property name="answer" column="Answer" not-null="true"/>
        <property name="sum" column="Sum"/>

    </class>

</hibernate-mapping>


Модель Answer и Question:
Код

....
public class Question {
    private Long id;
    private String question;
    private Set answers;
    // Getters and Setters
....

....
public class Answer {
    private Long id;
    private String answer;
    private String sum;
    // Getters and Setters
....



Все верно? В результате будут созданы 2 таблицы (структура в начале поста).
Да и еще вопрос это связь one-to-many, а чем она олична от many-to-one и какую связь в данном случае мне лучше применять.
Заранее спасибо.

Автор: Kangaroo 21.12.2007, 19:28
Цитата(greef @  20.12.2007,  13:22 Найти цитируемый пост)
Все верно?

На первый взгляд - да smile 


Цитата(greef @  20.12.2007,  13:22 Найти цитируемый пост)
Да и еще вопрос это связь one-to-many, а чем она олична от many-to-one и какую связь в данном случае мне лучше применять.

У тебя в классе Question множество (Set) Answer'ов. Поэтому для маппинга ты используешь one-to-many (один Вопрос к многим Ответам)
А вот если бы у тебя в классе Answer было поле типа Question (то есть там бы содержался вопрос к которому относится данный ответ), то ты бы использвал связь many-to-one в маппинга Answer'a.

Цитата(greef @  20.12.2007,  13:22 Найти цитируемый пост)
 какую связь в данном случае мне лучше применять.

Можна использовать обе связи, можна какую-нибудь одну. В зависимости от задачи...

Автор: greef 24.12.2007, 01:21
Цитата(Kangaroo @ 21.12.2007,  19:28)
Можна использовать обе связи, можна какую-нибудь одну. В зависимости от задачи...

А вот тут, если можно, подробнее...
Для web-голосования, что мне лучше использовать?

Автор: Kangaroo 24.12.2007, 17:04
Цитата(greef @  24.12.2007,  00:21 Найти цитируемый пост)
А вот тут, если можно, подробнее...

Можно  smile 

При проектировании программы вы определяете связи между классами, в зависимости от задач и функций программы. Правильно? 
Потом в зависимости от этих связей вы и делаете маппинг.

Пример.
Администратор выбирает определенный вопрос, нужно вывести вопрос и все ответы на этот вопрос. Исходные данные, например, - id вопроса. Сразу видно, что там нужна связь от Вопроса к Ответам (у вопроса будет список ответов), то есть связь one-to-many.

Для какой-нибудь другой задачи нужно будет по Ответу получить Вопрос, на который был дан этот ответ. Тогда свзять many-to-one.

Цитата(greef @  24.12.2007,  00:21 Найти цитируемый пост)
Для web-голосования, что мне лучше использовать?

Это уже ваша задача - решить, что вам нужно....

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