`

hibernate 总结二

阅读更多

十四: 关联

员工和部门是多对一      在员工表中 持有部门 类属性   depart
private Department depart
员工配置文件  多对一反射能够知道不是简单拿数据   知道depart找到类映射文件  才能把完整

对象映射过来  通过depart_id(表里列名),缺省  去寻找depart表里的id   如果不是映射id 

 再加一个  property-ref="name"
<many-to-one name="depart" column="depart_id"/>
存储进表里的数据列名为depart_id  引用的是对象的id   查询也一样查询得到的是我们的对象,

根据打印出来的sql可以看到,底层也是先插员工,根据员工里的部门id查询得到id

这个注解hibernate帮我们做了什么?  新增的时候,我们往这个字段里塞了一个对象,那么会往

数据库表的列里放入这个对象对应的表的注解列,就形成了外键引用
查询的时候,我们获取员工后,会连带着部门对象整个获取。底层当然还是查询了两个表,先查询

员工表,员工表里信息得到了里面包含一个部门id,再根据部门id查询得到部门的所有信息,映射

的员工表里的部门字段


部门到员工是一对多 
在部门表里  写一个集合
private Set<Employee> emps;
编写hibernate映射文件,只有hibernate能帮助我们完成这种关联  set
//set 告诉他是集合  class 告诉他集合里放的是啥 key 告诉他依赖什么区寻找这个集合,依赖

另一个对这个表的外键,也就是我们上一个写的  <many-to-one name="depart"

column="depart_id"/>列  可以得到一组部门号相同的员工集合
<set name="emps">
 <key cloumn="depart_id"></key>
 <one-to-many class="Employee" />
</set>

穿一个部门id得到员工集合,sql也是跑了两条  ,先查询部门信息  ,查询员工表(根据

depart_id)
save部门的时候给他穿一个员工集合会发生什么呢? 会更新员工的depart_id  为部门id


这个例子也能体现出对象模型和关系模型的不对等性。看我们的对象模型发生了改变,但关系模型

没变


十七 一对一
基于主键的one-to-one (person的映射文件)
Person <one-to-one name="idCard" /> 主
IdCard <one-to-one name="person" />  引用
两个类中他们是相互持有的
情况一:IdCard的id就是person的id  主外键关联
在写IdCard的id配置文件的时候这样写
<class name="IdCard" table="id_card">
 <id name="id">
  <generator class="foreign">
    这里指的是下面配置文件中的person
   <param name="property">person</param>    
  </generator>
 </id>
 <property name="life">life</property>
 <one-to-one name="person" />
</class>
情况二 idCard有自己主键,也是自增长,另外有一列是引用Person的id,和多对一类似,在id—

Card中引用其他表的外键上加上唯一性约束  就变成了一对一
<class name="IdCard" table="id_card">
 <id name="id">
  <generator class="native">
  </generator>
 </id>
 <property name="life">life</property>
 <many-to-one name="person" column="person_id" unique="true" />
</class>
Person配置文件
<one-to-one name="idCard" property-ref="person" />加上property-ref表示去

name="idCard" 中找person,如果id跟我的逐渐一致表示是这个人的卡

hibernate定义集合的时候只能使用接口不能用实现类


二十六:
级联操作   配置两个对象关联的时候都可以配置,例如
 <set name="emps" cascade="delete">....</set>  意思就是我删除部门把员工都删除


cascade   级联   可以设置为  save-update delete all等
看主从对象的关系例如person里的idcard引用就可以设置级联为all
一般多对多不配置级联  普通property没有这个属性的

一对多中一可以放弃维护关系(部门,集合这边出现)  inverse="true"  放弃维护关联关系 

hibernate不允许多的那边放弃关系维护(员工)
二十八

继承  关系模型 一个表有type skill sell 列没有为null
 关系模型  三个类 Employee 父类 Skill  Sales 子类
配置文件这样写
 <discriminator column="type" type="int"/>  鉴别器作用
 <subclass name="Skiller" discriminator-value="1"/>
  <property name="skill" />
 </subclass> 
 <subclass name="Sales" discriminator-value="2"/>
  <property name="sell" />
 </subclass> 
优点:效率高,只操作一张表,
缺点:增加子类要修改表结构,必须设计为可以为null
 
如果子类差别太大,可以选取方式:修改关系模型 将子类单独建张表
优点  表更合理 没有null字段
缺点 效率低
这两种可以结合使用

分享到:
评论

相关推荐

    Hibernate知识点总结

    ### Hibernate知识点总结 #### 一、Hibernate概述 Hibernate是一个开源的ORM(Object Relational Mapping,对象关系映射)框架,用于Java应用与关系型数据库之间的交互。它通过使用描述对象和数据库之间映射的元...

    Hibernate4总结文档

    《Hibernate4总结文档》 Hibernate4作为一款强大的Java对象关系映射框架,简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库层面的细节。本文将深入探讨Hibernate4的配置和使用,帮助开发者更好地理解...

    hibernate文档总结,技术汇总,PDF版的,hibernate简明参考文档

    2. **连接池**: Hibernate支持连接池技术,如C3P0或HikariCP,通过复用已打开的数据库连接,提高系统性能,避免频繁的连接创建和关闭。 3. **POJO(Plain Old Java Object)**: 在Hibernate中,POJO代表与数据库表...

    Hibernate 简单 PPT 总结

    【Hibernate 简单 PPT 总结】 Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。通过提供一套API和元数据,Hibernate允许开发者将业务对象直接映射到数据库表,从而避免了...

    hibernate学习总结文档

    2. **读取(Read)**:`get()` 或 `load()` 方法用于根据主键获取对象,`query()` 或 HQL(Hibernate 查询语言)用于执行更复杂的查询。 3. **更新(Update)**:修改对象后,调用 `update()` 或 `merge()` 方法同步...

    struts2+hibernate一周小项目总结

    struts2+hibernate一周小项目总结

    SSH之Hibernate总结

    SSH之Hibernate总结 SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置...

    jdbc_Hibernate总结

    2. 创建配置文件`hibernate.cfg.xml`,其中包含数据库连接信息、日志格式等。 3. 设计实体类,对应数据库表中的记录,并提供对应的getter和setter方法以及无参构造器。 4. 为实体类编写映射文件(如`Xxx.hbm.xml`)...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    Hibernate课程的总结

    **标题:“Hibernate课程的总结”** 在学习Hibernate框架的过程中,我们深入探讨了它在Java企业级应用中的核心地位。Hibernate作为一个强大的对象关系映射(ORM)工具,它简化了数据库与Java对象之间的交互,消除了...

    hibernate总结练习源码

    本资源包含的"hibernate总结练习源码"提供了对Hibernate ORM框架实际应用的实例,有助于深入理解和掌握其核心概念与功能。 1. **对象关系映射(ORM)**:Hibernate 提供了一种机制,将数据库中的表映射为Java类,表...

    hibernate技术研究对比总结

    **HIBERNATE技术总结** Hibernate 是一个流行的 Java 应用程序框架,它提供了一种对象关系映射(ORM)解决方案,将数据库操作转化为面向对象的编程。此文档旨在研究和对比 Hibernate 技术的不同方面,帮助开发者更...

    Hibernate注解用法总结

    本文主要总结了Hibernate中常见的注解用法,涵盖了类级别和属性级别的注解,以及与主键和非主键相关的注解。 1. 类级别注解: - `@Entity`: 这个注解是必不可少的,它告诉Hibernate一个Java类是一个实体,可以映射...

    Hibernate 二级缓存 总结整理

    **Hibernate 二级缓存总结整理** 在Java的持久化框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它极大地简化了数据库操作。在处理大数据量或高并发的场景下,为了提高性能和减少数据库负载,...

    Hibernate总结——课程管理

    2. **读取(Read)** 使用`Session.get()`或`Session.load()`根据主键获取对象,或者使用`Session.createQuery()`或`Session.createCriteria()`执行HQL(Hibernate查询语言)或SQL查询。 3. **更新(Update)** ...

    hibernate 总结 附 项目

    2. **持久化类(Persistent Class)**: 实体类需要被标记为持久化类,以便 Hibernate 可以识别并管理它们。通常使用 `@Entity` 注解来完成这一操作。 3. **ID(Identifier)**: 每个实体都有一个唯一的 ID,对应...

    Hibernate重点总结

    2. **配置** - **hibernate.cfg.xml**: Hibernate的主配置文件,包含数据库连接信息、方言设置、缓存配置等。 - **实体映射文件(hbm.xml)**: 定义Java类与数据库表之间的映射关系,包括字段映射、主键生成策略等...

    Hibernate总结(三)

    《Hibernate总结(三)》 在本篇关于Hibernate的总结中,我们将深入探讨这个流行的Java对象关系映射(ORM)框架的关键概念和技术细节。Hibernate作为一款强大的工具,它极大地简化了Java开发人员处理数据库操作的工作...

Global site tag (gtag.js) - Google Analytics