Hibernate双向多对多实现

时间:2010-12-04 11:26:49

标签: java mysql database hibernate postgresql

我是hibernate的新手,我想在hibernate中实现这样的东西。为了能够做到这一点,我在设置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();

我让所有参加该课程的学生

与之相似     当我做的时候

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

我得到了指定的学生并且做了

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

我得到指定学生已经完成的所有课程

2 个答案:

答案 0 :(得分: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 :(得分:1)

您所寻找的内容与此处所述的示例非常相似: http://technicalmumbojumbo.wordpress.com/2007/09/25/investigating-hibernate-associations-many-to-many/

它以单向关系开始,最后定义双向关系的映射。

希望这有帮助,
Octav

=====================================
不要忘记你必须决定哪个实体是这种关系的所有者:学生或课程。 一旦你决定了,“拥有”实体的Hibernate映射需要将“inverse”标志设置为true。
如果你在文章的最后检查Phone实体的Hibernate映射,那就是上面链接中描述的内容。