美文网首页
hibernate对象关系

hibernate对象关系

作者: 蘋果_283e | 来源:发表于2017-04-20 14:02 被阅读0次

Hibernate是一款ORM框架,对JDBC进行了轻量级的对象封装。

简单来说,现在主流数据库,都是关系模型的。

但程序却是面对对象的。

hibernate 的作用就是让我们可以用面对对象的思想来操作关系型数据库。

简化了传统DAO层的代码量。并且更加符合面向对象原则。这就是对象-关系映射

常见对象关系

1对1:  学生和学生证

1对多:1位老师我多位学生

多对多:商品和顾客

(1拷jar包2拷utils包中的HibernateXMLAutoCreateUtils.java3配置cfg.xml 4建类 5写main方法生成(manytoone)hbm.xml文件(会报错正常)6改hbm.xml文件<one-to-one name="per" class="entity.Person" cascade="all"></one-to-one>)

1对1关系

即在一个对象中存在另一个对象的引用

单向1对1主键

IdCard c1=new IdCard("1101031978423Xyy");

Person per=new Person("李小龙345ewr", c1);

//session.save(per);

cascade若设成all,删除人也会删除对应的证

双向1对1主键

IdCard c1=new IdCard();

c1.setCardNo("456466701155454454x");

Person per=new Person("李小龙3465756dfg", c1);

session.save(per);

单向1对1外键

public class IdCard {

private int id;

private String cardNo;

public class Person {

private int pid;

private String name;

private IdCard card;

<many-to-one name="idCard" class="entity.IdCard" cascade="all" lazy="false" unique="true">

必须是all,不然会报错

另一个什么都没有

IdCard c1=new IdCard("1234456664333");

Person per=new Person("zhangsan",c1);

session.save(per);

或者

IdCard c1=new IdCard();

c1.setCardNo("1234456664333");

Person per=new Person("zhangsan",c1);

session.save(per);

双向1对1外键

public class IdCard {

private int id;

private String cardNo;//有set get方法

private Person per;

public class Person {

private int pid;

private String name;

private IdCard card;

<one-to-one name="per" class="entity.Person" cascade="all"></one-to-one>

<many-to-one name="idCard" class="entity.IdCard" cascade="all" lazy="false" unique="true"></many-to-one>

Person per=new Person();

per.setName("赵子龙");

IdCard c1=new IdCard("456466701155454454x",per);

//session.save(c1);

1对多关系

单向1对多关系

public class Student {private int sid;private String name;private float score;

public class Teacher {//1对多方,多属性要用Set集合private int id;private String name;private String kc;private Setstu=new HashSet();

HibernateXMLAutoCreateUtils.createHibernatePOJOMappingManyToOne(Student.class, "sid","student_tab", Teacher.class, "id","teacher_tab");(自动生成hbm.xml文件)

<set name="stu" lazy="false" cascade="all"><key colimn="id"/><one-to-many class="com.hw.entity.Student"/></set>

另一个没有

Student stu1=new Student("刘能",98);Student stu2=new Student("王英",82);Setset=new HashSet();

set.add(stu1);set.add(stu2);

Teacher tea=new Teacher("谢大脚", "唱歌", set);

//session.save(tea);//添加教师

双向1对多关系

public class Student {private int sid;private String name;private float score;private Teacher tea;

public class Teacher {//双向1对多方,多属性要用Set集合private int id;private String name;private String kc;private Setstu=new HashSet();

(自动生成hbm.xml文件)老师外键设成cascade=all时 删除学生会报错

s<many-to-one name="tea" cascade="save-update" lazy="false" column="id" class="com.hw.entity.Teacher"/>

t<set name="stu" lazy="false" cascade="none" ><key column="id"/><one-to-many class="com.hw.entity.Student"/></set>

这里如果设置(权限反转,交给多的一方)inverse=true cascade="all" 会删不掉

Set<Student>set=new HashSet<Student>();

Teacher tea=new Teacher("王大拿", "相声", set);

Student stu1=new Student("小沈阳",100,tea);

Student stu2=new Student("刘能",77,tea);

set.add(stu1);set.add(stu2);

//session.save(tea);

多对多

多对多(many-to-many):在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;hibernate会为我们创建中间关联表(中间表),转换成两个一对多。

public class Student {

private int sid;

private String sname;

private float score;

private Set<teacher> set=new HashSet<Teacher>();

public class Teacher {//多对多关系:双方都要用Set集合

private int tid;

private String tname;

private String lesson;//课程

private float money;//工资

private Set<Student> stu=new HashSet<Student>();

Student.hbm.xml

<set name="tea" table="teacher_student" lazy="false"><key column="sid"/>

<many-to-many class="com.hw.entity.Teacher" column="tid"/></set>

Teacher.hbm.xml

<set name="stu" table="teacher_student" lazy="false" cascade="all"><key column="tid"/><many-to-many class="com.hw.entity.Student" column="sid"/></set>

cascade="all" 自己加

Student stu1 = new Student();stu1.setSname("刘能");stu1.setScore(88);Student stu2 = new Student();stu2.setSname("赵四");stu2.setScore(98);Student stu3 = new Student();stu3.setSname("刘英");stu3.setScore(100);Setset = new HashSet();set.add(stu1);set.add(stu2);set.add(stu3);Teacher tea = new Teacher("谢大脚", "唱歌", 15800, set);session.save(tea);

cascade几种取值

cascade(级联)几种取值:

save-update:  级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除

delete:              级联删除, 但不具备级联保存和更新

all:                    级联删除, 级联更新,但解除父子关系时不会自动删除子对象.

delete-orphan:删除所有和当前对象解除关联关系的对象

none:...

级联保存和级联更新总是集合在一起的, 所以没单独的save 或 update

相关文章

  • Hibernate入门(一)之基本配置

    Hibernate是什么? Hibernate是一个开源的持久层ORM(对象关系映射)框架. Hibernate能...

  • Hibernate介绍

    Hibernate的介绍: (开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系映射框架...

  • hibernate对象关系

    Hibernate是一款ORM框架,对JDBC进行了轻量级的对象封装。 简单来说,现在主流数据库,都是关系模型的。...

  • Hibernate入门1-基本用法

    Hibernate 快速入门1 - 基本用法 Hibernate简介 ORM:对象关系映射(ORM, Object...

  • ORM框架之Hibernate

    一、 Hibernate 说明 1. Hibernate 功能 (1)Hibernate是一个开放源代码的对象关系...

  • Hibernate的学习

    一.HIbernate框架介绍 什么是Hibernate: Hibernate是一个开放源代码的对象关系映射框架,...

  • 【5分钟背八股】mybatis和hibernate的区别?

    Hibernate的优点: 1、hibernate是全自动,hibernate完全可以通过对象关系模型实现对数据库...

  • Hibernate学习

    (一)hibernate对象关系:单向1对1主键

  • hibernate-1

    hibernate和ORM概念 hibernate 是对jdbc进行轻量级对象封装的框架,是一种关系型映射框架对象...

  • Hibernate的基础

    1.Hibernate的基本使用方式 1.Hibernate是一个对象关系映射框架 2.Hibernate的命名规...

网友评论

      本文标题:hibernate对象关系

      本文链接:https://www.haomeiwen.com/subject/ywflzttx.html