2010-12-04 14 views
0

Je suis nouveau sur Hibernate et je veux implémenter quelque chose comme ça en hibernation. Pour être en mesure de le faire, je rencontre des problèmes lors de la définition du fichier de mappage XML. Si quelqu'un peut me aider, ce serait très agréable car cela est juste la preuve du concept que je suis en train de faire, j'ai des choses beaucoup plus compliquées à do.ThanksMise en œuvre Hibernate bidirectionnelle Many to Many

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>(); 
} 

Mais dans la base de données, je veux 3 Table à créer étudiants, cours et StudentCourse

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

ce que je veux est que quand je fais

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

Je reçois le cours spécifié et en faisant

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

Je reçois tous les étudiants inscrits à ce cours

similairement Quand je

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

Je reçois l'étudiant spécifié et en faisant

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

Je reçois tous les cours l'étudiant spécifié a pris

+0

Un conseil: lorsque vous utilisez Hibernate, vous pouvez utiliser des annotations pour décrire l'instanc de mappage de XML. Il profite des mêmes caractéristiques, mais il n'est pas si difficile d'écrire. – Ralph

Répondre

1

Jetez un oeil à 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> 

Eh bien, si vous mettez en miroir le jeu dans l'autre classe comme ça ça ne marche pas?

1

Ce que vous cherchez est très similaire à l'exemple indiqué ici: http://technicalmumbojumbo.wordpress.com/2007/09/25/investigating-hibernate-associations-many-to-many/

Il commence par une relation unidirectionnelle, et à la fin, il définit les correspondances pour une bidirectionnelle.

Hope this helps,
Octav

=================================== ==
N'oubliez pas que vous devez décider quelle entité est le propriétaire de cette relation: Étudiant ou Cours. Une fois que vous avez décidé que, le mappage Hibernate de l'entité "possédée" doit avoir l'indicateur "inverse" défini sur true.
C'est exactement comme cela est décrit dans le lien ci-dessus, si vous vérifiez le mappage Hibernate pour l'entité Phone, à la fin de l'article.

+0

Dans les deux liens illustrés ci-dessus, l'un des tableaux contient l'ensemble alors que l'autre n'en a pas. Je veux une situation où les deux tables maintiennent les ensembles – Noor

+0

Cochez plus bas sur la page, car la relation initialement unidirectionnelle est changée en une relation bidirectionnelle. Le paragraphe commence par: «En route, mettons en place une association bidirectionnelle de plusieurs à plusieurs». – octav