我是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();
我得到指定学生已经完成的所有课程
答案 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映射,那就是上面链接中描述的内容。