Hibernate Двунаправленная реализация «многие ко многим» - PullRequest
0 голосов
/ 04 декабря 2010

Я новичок в спящем режиме и хочу реализовать нечто подобное в спящем режиме. Чтобы быть в состоянии сделать это, у меня проблема с настройкой файла сопоставления 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();

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

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

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

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

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

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

1 голос
/ 04 декабря 2010

Взгляните на это

<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>

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

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