一、 Hibernate对象的状态 实体对象的三种状态:

1) 暂态(瞬时态)(Transient)---实体在内存中的自由存在,它与数据库的记录无关。

po在DB中无记录(无副本),po和session无关(手工管理同步)

如:Customer customer = new Customer(); customer.setName("eric");

这里的customer对象与数据库中的数据没有任何关联

2) 持久态(Persistent)---实体对象处于Hibernate框架的管理中。

po在DB中有记录,和session有关(session自动管理同步)

3)游离态(脱管态)(Detached)

处于Persistent状态的实体对象,其对应的Session实例关闭之后,那么,此对象处于Detached状态。

po在DB中有记录,和session无关(手工管理同步)

无名态:po处于游离态时被垃圾回收了。没有正本,只有DB中的副本。

po处于暂态时被垃圾回收了,则死亡。(唯一可以死亡的状态)

实质上,这三个状态是:持久对象的正副本与同步的关系

原则:尽量使用持久态。

暂态--->持久态

A.调用Session接口上的get()、load()方法

B.调用Session接口上的save()、saveOrUpdate()方法

持久态--->暂态

delete();

游离态--->持久态

update()、saveOrUpdate()、lock();

(lock不建议用,危险;肯定没变化时用,有则用updata)

持久态--->游离态

evict()、close()、clear()

(一般用evict,只关闭一个实体的连接;close关闭整个连接,动作太大)

二、 映射(重点掌握和理解,注意配置的细节) 关联关系:A有可能使用B,则AB之间有关联关系(Java里指A有B的引用)。

双边关系、传递性、方向性、名称、角色(权限)、数量(1:1;1:m;n:m)、关联强度

委托:整体跟部分之间是同一类型。 代理:整体跟部分之间不是同一类型。

A. 单一实体映射:最简单、基本映射(最重要);任何其他映射种类的基础。

原则:1.类->表;一个类对应一个表。

2.属性->字段:普通属性、Oid;一个属性对应一个字段。

B. 实体关系映射:

a.关联关系映射:(最难、量最多)

1.基数关系映射:

一对一(one to one) (共享主键、唯一外键)

一对多(one to many) (1:m) 作级联,删one后连着删many

多对一(many to one) (m:1) 不作级联,删many中一个,不删one

多对多(many to many)(n:m = 1:n + m:1)

2.组件关系映射:(一个类作为另一个类的零件,从属于另一个类,没有自己的XML)

单一组件关系映射

集合组件关系映射 www.lefeng123.com

b.继承关系映射:(最普遍。两个类有继承关系,在本质上他们就是一对一关系。共享主健。)

有三种映射方案:

1.一个类一个表(效率很低;最后考虑使用,一般是数据量较大和父子类重复字段不多的时候用)

只有当子类中的属性过多时才考虑每个类建一个表的策略。

2.一个实体一个表(多表查询效率低,不考虑多态时用)

不考虑多态时,最好是用只针对具体类建表,而考虑多态时尽量使用所有类建一个表

3.所有类一个表(查询效率最高,结构简单;字段数不超过100个时使用,首选)

c.集合映射(值类型)

Set 不重复、无顺序

List 可重复、有顺序

Map

Bag 可重复、无顺序(bag本身也是list实现的)

双向关联(Bidirectional associations)(相当于两个单向关联)

单向关联(Unidirectional associations)

"一"方的配置:

<!-- 表明以Set集合来存放关联的对象,集合的属性名为orders;一个"customer"可以有多个"order" -->

<!-- inverse="true"表示将主控权交给order,由order对象来维护关联关系,

也就是说order对象中的关联属性customer的值的改变会反映到数据库中 -->

<set name="orders" cascade="save-update" inverse="true">

<!-- 表明数据库的orders表通过外键customer_id参照customer表 -->

<key column="customer_id"/>

<!-- 指明Set集合存放的关联对象的类型 -->

<one-to-many class="many_to_one.vo.Order"/>

</set>

"多"方的配置:

<many-to-one

name="customer"

class="many_to_one.vo.Customer"

column="customer_id"

not-null="true"

cascade="save-update"

/>

cascade属性:设定级联操作(插入、修改、删除)。

cascad属性值 描述

-------------------------------------------------------------------------

none 保存、更新或删除当前对象时,忽略其他关联对象,默认属性值

save-update 通过Session的save()、update()以及saveOrUpdate()方法来保持、更新当前对象时级联

所有关联的新建对象,并且级联更新所有有关联的游离对象

delete 当通过Session的delete()方法来删除当前对象时,级联删除所有关联对象

all 包含所有的save-update以及delete行为托福答案 www.yztrans.com

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

all-delete-orphan 包含all与delete-orphan的动作

inverse属性:表示是否将当前属性的值的变化反映到数据库中去。

false --- 表示反映到数据库中

true ---表示不反映到数据库中

Set的lazy属性:

A.不设置lazy值,默认true 现象:查询Customer时,不会主动查询关联表Orders(SQL语句)

B.设置lazy=false 现象:出现查询Orders表的SQL语句

3、多对多

默认情况下,由两方共同维护关联关系。也就是两个对象关联属性的值的改变都会反映到数据库中。

Hibernate对象的状态和映射的更多相关文章

  1. Hibernate(3)——实例总结Hibernate对象的状态和ThreadLoacl封闭的session

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: Hibernate的内部执行过程(CRUD) 对象的状态及其转换图和例子 使用JUnit测试 使用getCur ...

  2. Hibernate对象的状态分类

    对象的状态: 临时状态Transient: 与数据库没有对应,跟Session没有关联 一般是新new出的对象 持久化状态Persistent: 对象在Session的管理之中,最终会有对应的数据库记 ...

  3. Hibernate对象的状态

    站在持久化的角度, Hibernate 把对象分为 4 种状态: 1. 持久化状态 2. 临时状态 3. 游离状态 4. 删除状态 Session 的特定方法能使对象从一个状态转换到另一个状态. 下面 ...

  4. Hibernate对象的状态转换

    Hibernate中的实体对象可以分为三种状态:Transient(临时).Persistent(持久).Detached(游离) Transient 用new创建出对象,这些对象还没有与数据库发生任 ...

  5. hibernate对象的状态以及生命周期

    瞬时状态:session中没有,数据库中没有 持久状态:session中有,数据库中有 游离状态:session中没有,数据库中有 get和load都是用来提取数据的 get和load的区别: get ...

  6. 菜鸟学SSH(八)——Hibernate对象的三种状态

    前面写了几篇关于SSH的博客,但不是Struts就是Spring,Hibernate还从来没写过呢.说好是SSH的,怎么可以光写那两个,而不写Hibernate呢对吧.今天就先说说Hibernate对 ...

  7. Hibernate框架--对象的状态,缓存, 映射

    回顾Hibernate第二天: 1.  一对多与多对一 2. 多对多 3. inverse/cascade 4. 关联关系的维护 一对多: <set name="映射的集合属性&quo ...

  8. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. Hibernate 对象的三种状态

    hibernate对象的三种状态: (一) 瞬时(临时)状态:   对象被创建时的状态,数据库里面没有与之对应的记录! (二) 持久状态:   处于session的管理中,并且数据库里面存在与之对应的 ...

随机推荐

  1. BZOJ1533: [POI2005]Lot-A Journey to Mars

    1533: [POI2005]Lot-A Journey to Mars Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 174  Solved: 76[S ...

  2. app开发历程——android手机显示服务器端图片思路

    以前自己都不知道怎么去显示服务器端的图片,还好在apkbus论坛上找到一个特别简单的例子.虽然一天天忙忙碌碌,但是自己内心其实有一种想逃的心里,说不定哪天就会冒出来. 1.首先服务器端图片 这里的Im ...

  3. HDOJ 2089 不要62(打表)

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  4. HDOJ 1097 A hard puzzle(循环问题)

    Problem Description lcy gives a hard puzzle to feng5166,lwg,JGShining and Ignatius: gave a and b,how ...

  5. E - Just a Hook - hdu 1698(区间覆盖)

    某个英雄有这样一个金属长棍,这个金属棍有很多相同长度的短棍组成,大概最多有10w节,现在这个人有一种魔法,他可以把一段区间的金属棍改变成别的物质,例如金银或者铜, 现在他会有一些操作在这个金属棍上,他 ...

  6. 非常有利于seo的主题(红黄蓝绿)通用教程

    这篇教程是帮助刚使用Wordpres的朋友们的,免得自己弄得一头雾水.大江网络来教大家了解下如何设置自定义导航菜单. 一.首先进入后台,点击“外观”,选择“菜单”按钮,如下图: 然后看到右边界面中菜单 ...

  7. MySQL中char、varchar和text的区别

    三者空间占用方面: char:存储定长数据很方便,CHAR字段上的索引效率极高,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填 ...

  8. 从无到有开发连麦直播技术<转>

    转贴地址:http://blog.csdn.net/heisedelangzi/article/details/52400333 从无到有开发连麦直播技术点整理-AnyRTC 直播关键字 采集.前处理 ...

  9. FLEX 图片拷贝

    在用FLEX做GIS相关的开发的时候,遇到一个问题.因为是监控类的系统,所以需要要求地图上的ICON的实时更新,从而会出现重复加载的情况.就是重复请求相同的图片用做背景,尤其是在加载的ICON较多的时 ...

  10. 【高级算法】模拟退火算法解决3SAT问题(C++实现)

    转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46453761 ---------------------------------- ...