Hiberante 单向多对一和一对多的关联映射
来源:互联网 发布:服务器提供商 知乎 编辑:程序博客网 时间:2024/06/07 02:00
存在如下表,考虑多对一和一对多的配置
多对一,如何在多的一端配置 从多的一端获取一的一端的数据
student
public class Student { private int id; private String name; private int age; private Grade grade;//get…set}
Grade
public class Grade { private int id; private String name; //get…set}
Grade.hbm.xml
<hibernate-mapping package="cn.siggy.pojo"> <class name="Grade"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> </class></hibernate-mapping>
Student.hbm.xml
<hibernate-mapping package="cn.siggy.pojo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/> <!-- 多对一 name 表示属性名 class 指明 属性对应的类 column指 数据库表中的列名 --> <many-to-one name="grade" class="Grade" column="grade_id" foreign-key="fk_grade" not-null="true"/> </class></hibernate-mapping>
测试(session对象的获取封装在HibernateUtil,略)
@Test public void testSave() throws HibernateException, SerialException, SQLException{ Session session = null; Transaction tx = null; try{ session = HibernateUtil.getSession(); tx = session.beginTransaction(); Grade grade = new Grade(); grade.setName("基础"); session.save(grade); Student stu = new Student(); stu.setName("张三疯"); stu.setAge(22); stu.setGrade(grade); session.save(stu); tx.commit(); }catch (HibernateException e) { if(tx!=null) tx.rollback(); e.printStackTrace(); throw e; }finally{ HibernateUtil.closeSession(); } }
一对多 在一的一端配置 从一的一端获取多的一端的数据 用集合表示
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>(0); //get…set}
Grade.hbm.xml
<hibernate-mapping package="cn.siggy.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"></key> <!-- one-to-many 一对多 类Grade 中 students 所表示类型 --> <one-to-many class="Student"/> </set> </class></hibernate-mapping>
student.hbm.xml
<hibernate-mapping package="cn.siggy.pojo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"/> <property name="age"/></class></hibernate-mapping>
测试
session = HibernateUtil.getSession(); tx = session.beginTransaction(); Grade grade = new Grade(); grade.setName("基础"); Student stu = new Student(); stu.setName("张三疯"); stu.setAge(22); Student stu1 = new Student(); stu1.setName("老王"); stu1.setAge(23); //关联 grade.getStudents().add(stu); grade.getStudents().add(stu1); //保存数据的顺序 是根据外键的配置来决定的 //如果外键不能为null,那么先保存一的一端 //如果外键可以为null,则可以随意保存 session.save(grade); session.save(stu); session.save(stu1); tx.commit();
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(); for(;iter.hasNext();){ Student temp = iter.next(); System.out.println("name="+temp.getName()+"\tage="+temp.getAge()); } tx.commit();
阅读全文
0 0
- Hiberante 单向多对一和一对多的关联映射
- hibernate4- 单向多对一、一对多的关联映射
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- 关于hibernate的多对一单向关联,一对多单向关联,和一对多双向关联的疑惑解答
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- 单向多对一的关联映射
- JPA实体的映射之 一对多关联映射 和 多对一关联映射
- 单向一对多的关联映射
- 一对多单向关联映射
- 【Hibernate】--关联关系映射:一对多和多对一
- hibernate 关联映射 一对多 和 多对一
- 设计模式之单例模式
- java HashTable 哈希表 及 映射 示例
- MFC绘图知识大全
- Oracle查看用户下、表下有哪些视图
- PAT乙级1047. 编程团体赛(20)
- Hiberante 单向多对一和一对多的关联映射
- 【HTML5学习笔记】29:CSS3渐变效果
- mysql数据库基本操作(一)
- 如何设置Ubuntu或Redhat下终端窗口的默认大小
- CSS设置页面最大最小宽度
- 【面经笔记】进程调度方式
- Mysql储存过程级建表结构
- Go 输入输出格式化
- JOB:前端面试题3