Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate. ManyToMany мапин посреднической таблицы 
:(
    Опции темы
unkis
  Дата 24.4.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



ребята у меня есть следующие таблицы


Код

CREATE TABLE Course (
  course_id BIGINT PRIMARY KEY,

  name VARCHAR(255)
)

CREATE TABLE Student (
  student_id BIGINT PRIMARY KEY,

  name VARCHAR(255)
)

CREATE TABLE grade_map (
  id BIGINT PRIMARY KEY auto_increment,

  student_id BIGINT REFERENCES Student(student_id),
  course_id BIGINT REFERENCES Course(course_id)
)



Если в посреднической таблице(grade_map) кроме ключей больше ничего нет, то мапинг выглядит следующим образом

Код

@Entity 
public class Course {
  @Id 
  @Column (name="course_id")
  public long getId()

  @Basic 
  public String getName()
}


Код

@Entity 
public class Student {
  @Id 
  @Column (name="student_id")
  public long getId()

  @Basic 
  public String getName()

  @ManyToMany(targetEntity="Course") 
  @JoinTable (
      table=@Table (name="student_course_map"),
      joinColumns=@JoinColumn (name="student_id")",
      inverseJoinColumns=@JoinColumn (name="course_id")")
  public Collection getCourses()
}


А как будет выглядеть маппинг, если в посреднической таблице(grade_map) добавить ещё скажем один атрибут "nr", то есть выглядеть таблица будет так?

Код


CREATE TABLE grade_map (
  id BIGINT PRIMARY KEY auto_increment,

  student_id BIGINT REFERENCES Student(student_id),
  course_id BIGINT REFERENCES Course(course_id),
  
  nr INT

)




--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 24.4.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Если значение поля nr не нужно, точно также и будет. Если все-таки нужно, то надо делать два отношения один-ко-многим и заводить класс для grade_map.
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
  Дата 24.4.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



подождите я что-то не совсем понял, вот смотрите, один Student может посещать много Cource, и в свою же очередь Cource может принадлежать многим студентам - это то как я понимаю ManyToMany отношение. 
Первое это правильно?

Если это правильно то почемк тогда в Cource нет Collection<Student>?


Цитата(tux @  24.4.2007,  11:13 Найти цитируемый пост)
Если значение поля nr не нужно, точно также и будет. Если все-таки нужно, то надо делать два отношения один-ко-многим и заводить класс для grade_map. 


Как раз и нужно, ты бы не мог привести пример мапинга, а то я что-то в этом Hibernate вообще запутался. 


--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 24.4.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(unkis @  24.4.2007,  15:09 Найти цитируемый пост)
ты бы не мог привести пример мапинга, а то я что-то в этом Hibernate вообще запутался.  

Аннотациями не смогу. Маппинги в XML могу написать.
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
  Дата 24.4.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



давай  в xml, в принципе без разницы.


--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 25.4.2007, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(unkis @  24.4.2007,  15:09 Найти цитируемый пост)
Если это правильно то почемк тогда в Cource нет Collection<Student>?

Это кому вопрос?

Что-то такое в XML будет. Правильность не гарантирую, не проверял.

Course:
Код

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
      <class name="Course" table="course"> 
            <id name="courseId" column="course_id"
                  type="java.lang.Integer">
                  <generator class="increment" />
            </id> 
            <property name="name" type="java.lang.String" column="name" not-null="true" /> 
            <set name="gradeMap" lazy="true"> 
                  <key column="course_id" /> 
                  <one-to-many
                        class="GradeMap" /> 
            </set> 
      </class> 
</hibernate-mapping>


Student:
Код

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
      <class name="Student" table="student"> 
            <id name="studentId" column="student_id"
                  type="java.lang.Integer">
                  <generator class="increment" />
            </id> 
            <property name="name" type="java.lang.String" column="name" not-null="true" /> 
            <set name="gradeMap" lazy="true"> 
                  <key column="student_id" /> 
                  <one-to-many
                        class="GradeMap" /> 
            </set> 
      </class> 
</hibernate-mapping>


GradeMap:
Код

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
      <class name="GradeMap" table="grade_map"> 
            <id name="gradeMapId" column="grade_map_id"
                  type="java.lang.Integer">
                  <generator class="increment" />
            </id> 
            <many-to-one name="group" class="Course">
                  <column name="course_id" />
            </many-to-one> 
            <many-to-one name="student" class="Student">
                  <column name="course_id" />
            </many-to-one> 
            <property name="nr" type="java.lang.Integer" column="nr" not-null="true" /> 
      </class> 
</hibernate-mapping>

PM MAIL Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0747 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.