Hibernate Двунаправленная реализация «многие ко многим»

0

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

public class Course implements java.io.Serializable 
{
    private long courseId;
    private String courseName;
    private Set <Student> Stu = new HashSet <Student>();
}

public class Student implements java.io.Serializable 
{

    private long studentId;
    private String studentName;
    private Set<Course> courses = new HashSet<Course>();
}

Но в базе данных я хочу создать 3 таблицы Студент, курс и студенческий тур

              Student----->StudentCourse<------Course 
            StudentId      StudentId          CourseId     
                            CourseId     

Я хочу, чтобы, когда я делал

 Course C1=(Course)session.get(Course.class,CourseId)

Я получаю указанный курс и выполняя

  Set <Student> StudentsEnrolled=C1.getStu();

Я получаю всех студентов, обучающихся в этом курсе

Similary   Когда я делаю

Student S1=(Student)session.get(Student.class,StudentId)

Я получаю заданного ученика и выполняя

Set <Course> CoursesEnrolled=S1.getCourses();

Я получаю все курсы, которые указал выбранный ученик

  • 0
    Только подсказка: при использовании hibernate вы можете использовать аннотации для описания отображения XML. Он обладает теми же характеристиками, но писать его не так уж и много.
Теги:
database
hibernate

2 ответа

1
Лучший ответ

Взгляните на this

<hibernate-mapping>
    <class name="com.vaannila.student.Student" table="STUDENT">
        <meta attribute="class-description">This class contains student details.</meta>
        <id name="studentId" type="long" column="STUDENT_ID">
            <generator class="native" />
        </id>
        <property name="studentName" type="string" length="100" not-null="true" column="STUDENT_NAME" />
        <set name="courses" table="STUDENT_COURSE" cascade="all">
            <key column="STUDENT_ID" />
            <many-to-many column="COURSE_ID"  class="com.vaannila.student.Course" />
        </set>
    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="com.vaannila.student.Course" table="COURSE">
        <meta attribute="class-description">This class contains course details.</meta>
        <id name="courseId" type="long" column="COURSE_ID">
            <generator class="native"/>
        </id>
        <property name="courseName" type="string" column="COURSE_NAME"/>
        <set name="students" table="STUDENT_COURSE" cascade="all">
            <key column="COURSE_ID" />
            <many-to-many column="STUDENT_ID"  class="com.vaannila.student.Student" />
        </set>
    </class>
</hibernate-mapping>

Хорошо, если вы зеркалируете набор в другом классе, как это, он не работает?

1

То, что вы ищете, очень похоже на пример, указанный здесь: http://technicalmumbojumbo.wordpress.com/2007/09/25/investigating-hibernate-associations-many-to-many/

Он начинается с однонаправленного отношения, и в конце он определяет отображения для двунаправленного.

Надеюсь, что это поможет,
Octav

=====================================
Не забывайте, что вам нужно решить, какая организация является владельцем этих отношений: студент или курс. После того, как вы решили, сопоставление Hibernate "принадлежащего" объекта должно иметь флаг "обратный", установленный в true.
Именно так, как описано в ссылке выше, если вы проверяете сопоставление Hibernate для объекта Phone, в конце статьи.

  • 0
    В обеих приведенных выше ссылках одна таблица имеет набор, а другая - нет. Я хочу ситуацию, когда обе таблицы содержат наборы
  • 0
    Проверьте далее вниз по странице, так как изначально однонаправленное отношение изменяется на двунаправленное. Параграф начинается с: «Двигаясь дальше, давайте установим двунаправленную ассоциацию« многие ко многим ».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню