【Hibernate】——一对多映射
来源:互联网 发布:淘宝上的体检中心在哪 编辑:程序博客网 时间:2024/05/17 11:07
正如上篇【Hibernate】——多对一映射 所说,一对多映射是多对一的反例,一个班有多个学生,这就是一种
一对多的体现。如图所示:
建立Class实体类,在Class建立Student的集合关系:
package com.bjpowernode.hibernate;import java.util.Set;/** * 建立Class实体类 * @author why_768 * */public class Class {private int id;private String name;private Set students;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set getStudents() {return students;}public void setStudents(Set students) {this.students = students;}}
class实体映射文件配置,在set标签里设置class与student的一对多关系,并且在t_student里添加外键classid:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.Class" table="t_class"><id name="id"><!-- 采用foreign生成策略,会取得关联对象的标识 --><generator class="native" /></id><property name="name"/><set name="students"><key column="classid"/><one-to-many class="com.bjpowernode.hibernate.Student"/></set></class></hibernate-mapping>
新建student实体对象:
package com.bjpowernode.hibernate;public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
配置Student的实体映射文件:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.bjpowernode.hibernate.Student" table="t_student"><id name="id"><generator class="native"/></id><property name="name"/></class></hibernate-mapping>
配置完成了,新建数据库,生成数据库表。建立一个Junit测试类,保存一条数据:
public void testSave1(){ Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); Student student1 = new Student(); student1.setName("Yana"); session.save(student1); Student student2 = new Student(); student2.setName("ZJ"); session.save(student2); Class class1 = new Class(); class1.setName("一班"); Set students = new HashSet(); students.add(student1); students.add(student2); class1.setStudents(students); session.save(class1); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally{ HibernateUtils.closeSession(session); } }
数据已经保存到数据库了:
这就是一对多映射的单向映射,有单向映射,当然也有双向映射咯。双向映射也很简单,只需要在Student实
体类里添加属性Class:
package com.bjpowernode.hibernate;public class Student {private int id;private String name;private Class class1;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Class getClass1() {return class1;}public void setClass1(Class class1) {this.class1 = class1;}}
然后在Student的映射文件里配置多对一:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.bjpowernode.hibernate.Student" table="t_student"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="class1" column="classid"/> </class></hibernate-mapping>
基本设置就完成了,这样无论通过Student还是Class都能保存和查询数据了。至于数据库中字段classid的维
护,如果需要让Student进行维护,只需要在Class.hbm.xml映射文件里配置inverse属性:
<!-- inverse=“true”影响存储管理,只能由一的一方进行管理 --><set name="students" inverse="true"><key column="classid"/><one-to-many class="com.bjpowernode.hibernate.Student"/></set>inverse用在一个对多和多对多双向关联上,主要影响存储管理,如果inverse=“true”,本端不能维护,会交给
另一端维护。
一对多映射讲到这里,下篇主要讲一对一映射关系。
0 0
- 【Hibernate】——一对多映射
- Hibernate一对多关联映射—单向
- hibernate一对多关联映射—单向
- hibernate一对多关联映射—单向
- Hibernate映射——一对多关联映射(七)
- Hibernate映射——一对多关联映射(七)
- Hibernate映射—— 一对多关联映射
- hibernate 映射关系—关系映射(一对多)
- hibernate 一对多映射
- Hibernate一对多映射
- Hibernate 一对多映射
- Hibernate 一对多映射
- hibernate 一对多映射
- hibernate一对多映射
- 【Hibernate】一对多映射
- Hibernate映射一对多
- Hibernate一对多映射
- Hibernate一对多映射
- SQL事务
- pca入门
- bzoj2159
- Intellj IDEA 光标显示insert状态解决办法
- c++ 学习历程。
- 【Hibernate】——一对多映射
- SQL高级编程-子查询
- Lesson26 The best art critics
- C语言-根据输入的三角形的三条边判断三角形的类型,并输出它的面积和类型
- 知识库--Creating Transaction in Java Using Akka(124)
- 学习笔记1--在Qt5中利用OpenGL渲染一个立方体
- Hibernate-database returned no natively generated
- MySql基础
- GPS数据包解析