分类:一对多自身双向关联关系

Java持久化类:

  1. package com.hyy.hibernate.one_to_many.domain;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. /**
  7. * 分类:一对多自身双向关联关系
  8. * User: HYY
  9. * Date: 13-12-13
  10. * Time: 下午7:32
  11. * To change this template use File | Settings | File Templates.
  12. */
  13. public class Category {
  14. private Integer id;
  15. private String name;
  16. private Category parent;
  17. private Set<Category> children = new HashSet<Category>();
  18.  
  19. public Integer getId() {
  20. return id;
  21. }
  22.  
  23. public void setId(Integer id) {
  24. this.id = id;
  25. }
  26.  
  27. public String getName() {
  28. return name;
  29. }
  30.  
  31. public void setName(String name) {
  32. this.name = name;
  33. }
  34.  
  35. public Category getParent() {
  36. return parent;
  37. }
  38.  
  39. public void setParent(Category parent) {
  40. this.parent = parent;
  41. }
  42.  
  43. public Set<Category> getChildren() {
  44. return children;
  45. }
  46.  
  47. public void setChildren(Set<Category> children) {
  48. this.children = children;
  49. }
  50. }

Category.hbm.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5.  
  6. <hibernate-mapping package="com.hyy.hibernate.one_to_many.domain">
  7.  
  8. <class name="Category" dynamic-update="true">
  9.  
  10. <id name="id">
  11. <generator class="native"/>
  12. </id>
  13.  
  14. <property name="name" length="50" access="property"/>
  15.  
  16. <many-to-one name="parent" column="parent_id" />
  17.  
  18. <set name="children" inverse="true" cascade="save-update" lazy="true">
  19. <key column="parent_id"/>
  20. <one-to-many class="Category"/>
  21. </set>
  22.  
  23. </class>
  24.  
  25. </hibernate-mapping>

一对多关联关系的one-to-many和many-to-one标签中的外键名要相同,比如本例的parent_id,一定是这两个,不能是其他了。

测试类:

  1. public class CategoryTest {
  2.  
  3. @Test
  4. public void test1() {
  5. //食物
  6. Category food = new Category();
  7. food.setName("food");
  8.  
  9. //水果
  10. Category fruit = new Category();
  11. fruit.setName("fruit");
  12. fruit.setParent(food);
  13. food.getChildren().add(fruit);
  14.  
  15. //蔬菜
  16. Category veg = new Category();
  17. veg.setName("veg");
  18. veg.setParent(food);
  19. food.getChildren().add(veg);
  20.  
  21. //苹果
  22. Category apple = new Category();
  23. apple.setName("apple");
  24. apple.setParent(fruit);
  25. fruit.getChildren().add(apple);
  26.  
  27. Session session = HibernateUtil.getSession();
  28. session.beginTransaction();
  29. session.save(food);
  30. session.getTransaction().commit();
  31. }
  32. }

Hibernate 一对多自身双向关联关系 用于类别表的实现的更多相关文章

  1. Hibernate -- 一对多的双向关联关系

    示例代码: Customer.java package cn.itcast.many2onedouble; import java.util.HashSet; import java.util.Set ...

  2. Hibernate映射多对多双向关联关系(小案例)

    多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 pr ...

  3. Hibernate一对多(多对一)关联关系

    上一篇博文总结了 Hibernate 的一对一的关联关系, 包括基于主键的单向一对一, 基于外键的单向一对一, 基于外键的双向一对一. 下面咱们说一下 Hibernate 的一对多关联关系. 其实一对 ...

  4. hibernate(十)双向关联关系的CRUD

    本文链接:http://www.orlion.ml/28/ 一.保存 1. 假设一个group有多个user,一个user只属于一个group,当保存user对象到数据库中时可以 User u = n ...

  5. Hibernate -- 映射多对多双向关联关系

    1. 示例代码: Student.java package cn.itcast.many2many; import java.util.HashSet; import java.util.Set; @ ...

  6. 03.Hibernate一对多关联

    前言:在域模型中,类与类之间最普遍的关系就是关联关系,在UML语言中关联关系是有方向的.在数据库中表与表之间也会有关联关系,本节介绍通过Hibernate映射一对多的关联关系,这是一种最普遍的关联关系 ...

  7. Hibernate映射一对多双向关联关系及部门关联属性

    一对多双向关联关系:(Dept/Emp的案例) 既可以根据在查找部门时根据部门去找该部门下的所有员工,又能在检索员工时获取某个员工所属的部门. 步骤如下: 1.构建实体类(部门实体类加set员工集合) ...

  8. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  9. hibernate 一对多双向关联 详解

    一.解析: 1.  一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生. 同时,在加载学生时,也能够知道这个学生所在的班级. 2.我们知道,一对多关联映射和多对一关联映射是一样的,都是在 ...

随机推荐

  1. easyui-validatebox验证 radio

    添加规则 $.extend($.fn.validatebox.defaults.rules, { requireRadio: { validator: function(value, param){ ...

  2. div中的img垂直居中

    <html> <head> <style type="text/css"> .imgDiv { overflow: hidden; displa ...

  3. 【MINA】用protobuf做编解码协议

    SOCKET协议 支持java serial 与 AMF3的混合协议,目前没有基于xml 与 json的实现. 协议说明: * 9个字节协议头+协议体. * * 协议头1-4字节表示协议长度 =协议体 ...

  4. Html5时钟的实现

    最近准备把自己的博客装修一下,首先,先为自己设计一个时钟吧,希望博客园能够尽快发放给我使用js的权限! 自从看见了苹果设计的那款因为侵权而赔钱了时钟,我就决定我的时钟一定是要参考这个来设计了! 不得不 ...

  5. 如何给windows窗体程序打包成一个安装包

    http://blog.csdn.net/xyy410874116/article/details/6341787 给windows窗体程序打包成一个安装包:具体操作在:http://hi.baidu ...

  6. 【html】【17】高级篇--loading加载

    参考: http://aspx.sc.chinaz.com/query.aspx?keyword=%E5%8A%A0%E8%BD%BD&classID=835 下载:   http://sc. ...

  7. JavaScript中,按值传递与按地址(引用)传递。

    JavaScript中,数字型,字符串,布尔型等基本类型,传递给变量时,传递方式为按值传递,这个很好理解,不做多解释. 而令人有所疑惑的,是数组,对象等引用类型传递给变量是,传递方式为按地址传递.此处 ...

  8. 深度模拟java动态代理实现机制系类之一

    上一篇博客是最基本的动态代理原理的实现,因为其固定了接口,固定了代理方法,以及固定了代理的类型,接下来的博客系类将一步步渐入深度介绍java的动态代理的实现原理 ******************* ...

  9. Linux与Windows的桥梁--共享目录

    1.关闭防火墙和selinux         # service iptables stop         # chkconfig --level 2345 iptables off        ...

  10. centos7下编译qt的mysql驱动

    在编译mysql驱动之前,首先要安装mysql,可以使用yum安装,这里将不再介绍. 在将qt和mysql都安装好之后,首先找到mysql的头文件以及他的共享库,我的mysql是使用yum安装的,头文 ...