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

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. 【C语言】01-函数

    一.函数的分类 前面已经说过,C语言中的函数就是面向对象中的"方法",C语言的函数可以大概分为3类: 1.主函数,也就是main函数.每个程序中只能有一个.也必须有一个主函数.无论 ...

  2. MySQL之事务处理、存储过程

    事务处理 动作 开始事务:start transaction 提交事务:commit 回滚事务:rollback 设置自动提交:set autocommit 1 | 0 autoCommit系统默认是 ...

  3. sharepoint 删除list里的所有内容

    [System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $siteUrl = " ...

  4. sql查询某段时间内的数据

    查询半小时内数据的方法 1.select * from 表名 where datediff(minute,createtime,getdate())<30 2.select * from 表名 ...

  5. 关于error: cannot connect to daemon的解决办法

    执行adb devices时,如果出现以下错误: * daemon not running. starting it now on port 5037 * ADB server didn't ACK ...

  6. C语言对文件的相关命令

    fopen(文件名,使用文件的方式):打开数据文件 fclose(FILE *fp):关闭数据文件 feof(FILE *fp):是判断是否到fp的结尾 fputc(char ch,FILE *fp) ...

  7. 40个Java集合面试问题和答案【下】【转载】

    接上文:http://www.cnblogs.com/xujianbo/p/5148083.html 28.哪些集合类是线程安全的? Vector.HashTable.Properties和Stack ...

  8. 【html】【13】特效篇--下拉导航

    html代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  9. 九度OJ 1104 整除问题

    题目地址:http://ac.jobdu.com/problem.php?pid=1104 题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2 ...

  10. elementary os进入GUI桌面环境失败

    问题描述:电脑上安装了elementary os,重启后系统很顺利的到达了Login图形界面,在选定用户并键入正确的密码后,电脑黑屏了一至两秒钟后又回到的Login界面,一开始以为是密码输入错误了,就 ...