`
newleague
  • 浏览: 1473356 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

hibernate实例简析-hibernate_one2many_1

阅读更多
hihernate一对多关联映射(单向Classes----->Student)

一对多关联映射利用了多对一关联映射原理

多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一
一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多

也就是说一对多和多对一的映射策略是一样的,只是站的角度不同

在一一端维护关系的缺点:
* 如果将t_student表里的classesid字段设置为非空,则无法保存
* 因为不是在student这一端维护关系,所以student不知道是哪个班的,
  所以需要发出多余的update语句来更新关系
===
Student student1 = new Student();
student1.setName("10");
session.save(student1);

Student student2 = new Student();
student2.setName("祖儿");
session.save(student2);

Set students = new HashSet();
students.add(student1);
students.add(student2);

Classes classes = new Classes();
classes.setName("尚学堂");
classes.setStudents(students);

//可以正确保存
session.save(classes);
---
Classes classes = (Classes)session.load(Classes.class, 1);
System.out.println("classes.name=" + classes.getName());
Set students = classes.getStudents();
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
===
<hibernate-mapping package="com.bjsxt.hibernate">
<class name="Classes" table="t_classes">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="students">
<key column="classesid"/>
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
---
<hibernate-mapping>
<class name="com.bjsxt.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
===
public class Student {

private int id;

private String name;
---
public class Classes {

private int id;

private String name;

private Set students;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics