单向一对多映射和双向一对多映射
来源:互联网 发布:淘宝ipad客户端下载 编辑:程序博客网 时间:2024/06/05 17:51
上一篇博客以学生类Student和年级类Grade为例介绍了单向多对一映射,我们还以这两个类来看下单向一对多映射,以学生类为多的一端年级类为一的一端。
示例:
学生类Student
public class Student {private int id;private String name;private int age;//省略get/set方法}年级类Grade
public class Grade {private int id;private String name;private Set<Student> students=new HashSet<Student>();//省略get/set}Student.hbm.xml配置文件
<hibernate-mapping package="com.test.pojo"><class name="Student"><id name="id"><generator class="native"></generator></id><property name="name" /><property name="age"/></class></hibernate-mapping>Grade.hbm.xml配置文件
<hibernate-mapping package="com.test.pojo"><class name="Grade"><id name="id"><generator class="native"></generator></id><property name="name" /><!-- set是Grade中的集合属性 name属性名称 --><set name="students"> <!-- key表示外键 column表示外键列名 --> <key column="grade_Id" not-null="true"/> <!-- 一对多 类Grade中students所表示类型 --> <one-to-many class="Student"/></set></class></hibernate-mapping>测试类
public class HibernateTest {@Testpublic void testCreateDB(){Configuration cfg=new Configuration().configure();SchemaExport se=new SchemaExport(cfg);//第一个参数表示是否生成ddl脚本,第二个参数表示是否执行到数据库中se.create(true, true);}/** * 保存数据 */@Testpublic void save(){Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();Grade grade=new Grade();grade.setName("大一");Student stu=new Student();stu.setName("王五");stu.setAge(20);Student stu1=new Student();stu1.setName("李四");stu1.setAge(20);//关联grade.getStudents().add(stu);grade.getStudents().add(stu1);//保存数据的顺序是根据外键的配置来决定的//如果外键不能为null,县保存一的一端//如果外键可以为null,则可以随意保存session.save(grade);session.save(stu);session.save(stu1);tx.commit();}catch(Exception e){if(tx!=null)tx.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession();}}/** * 获取数据 */@Testpublic void testGet(){Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();Grade grade=(Grade) session.get(Grade.class, 1);System.out.println("gradeName="+grade.getName());System.out.println("grade所对应的多的一端的数据");Iterator<Student> iter=grade.getStudents().iterator();while(iter.hasNext()){Student stu=(Student)iter.next();System.out.println("学生name="+stu.getName());}tx.commit();}catch(Exception e){if(tx!=null)tx.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession();}}}执行testCreateDB控制台输出:
执行save控制台打印:
执行testGet控制台打印:
下面来看下双向一对多映射
与上面代码不同的是Student类增加了一个属性如下:
public class Student {private int id;private String name;private int age;private Grade grade;//省略get/set方法}Student.hbm.xml配置文件也有改动,如下:
<hibernate-mapping package="com.test.pojo"><class name="Student"><id name="id"><generator class="native"></generator></id><property name="name" /><property name="age"/><many-to-one name="grade" class="Grade" column="grade_Id"/></class></hibernate-mapping>注意:将Grade.hbm.xml配置文件里key里的not-null="true"去掉,否则会报错。
阅读全文
0 0
- Hibernate单向一对多映射和双向一对多映射
- 单向一对多映射和双向一对多映射
- hibernate一对多单向和双向映射
- 双向一对多映射
- 双向一对多映射
- 一对多单向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate xml一对多关联映射 单向+双向
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- 单向一对多和双向一对多
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- hibernate关系映射之单向多对一和双向一对多
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- UI
- python项目中不同文件夹py源文件之间如何相互调用--Python import中相对路径的问题
- 通过 JS 实现与后台进行连接,提交表单,将获取到的数据pos给服务器。
- Drools推理引擎
- Hadoop1.x 的MapReduce 简单例子WordCount
- 单向一对多映射和双向一对多映射
- 转,怕自己忘记<c:forEach varStatus="status">中 varStatus的作用
- 35day 新浪微博(CELL转发)
- 为什么越省钱的人却越穷?
- js取得参数的最好的代码,及其他代码搜集
- STORM入门之(Stream Groupings分组方式)
- 嵌套的控制结构、其他控制语句
- DataExcel 设置 函数
- struts2与struts1区别二