【问题标题】:Hibernate Bidirectional Many to Many implementationHibernate 双向多对多实现
【发布时间】:2011-05-20 04:35:00
【问题描述】:

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

我得到了指定学生所学的所有课程

【问题讨论】:

  • 仅提示:当使用休眠时,您可以使用注释来描述 XML 的映射。它提供了相同的功能,但写起来并不那么难。

标签: java mysql database hibernate postgresql


【解决方案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>

如果你像这样在其他类中镜像集合,它不起作用吗?

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助,
    八度

    ======================================
    不要忘记您必须决定哪个实体是此关系的所有者:学生或课程。 一旦你决定了,“拥有”实体的 Hibernate 映射需要将“反向”标志设置为 true。
    如果您在文章末尾检查 Phone 实体的 Hibernate 映射,这正是上面链接中描述的方式。

    【讨论】:

    • 在上面显示的两个链接中,一个表有集合,而另一个没有。我想要两个表都持有集合的情况
    • 进一步检查页面下方,因为最初的单向关系已更改为双向关系。段落开头是:“继续,让我们建立一个双向的多对多关联。”
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多