Hibernate三种状态 Transient(临时状态):new出来的对象;它没有持久化,不存在于Session中——此状态中的对象为临时对象。

Persistent(持久化状态):已经持久化,存在于Session缓存中;如经hibernate语句save()保存的对象——此状态对象为持久对象。

Detached(游离状态):持久化对象脱离了Session后的对象。如Session缓存被清空后的对象。已经持久化,单不存在于Session中——此状态中的对象为游离对象。

一对多的配置 img.png img_1.png 多对一的配置 img_2.png img_3.png

一级缓存 二级缓存 http://www.cnblogs.com/juaner767/p/5575076.html Hibenate中一级缓存,也叫做session的缓存,当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中。 一级缓存可以在session范围内减少数据库的访问次数,只在session范围有效,session关闭,一级缓存失效。 session的缓存由hibernate维护, 用户不能操作缓存内容; 如果想操作缓存内容,必须通过hibernate提供的evit/clear方法操作。 特点: 只在当前session范围有效,作用时间短,效果不是特别明显! 在短时间内多次操作数据库,效果比较明显! 二级缓存 Hibernate提供了基于应用程序级别的缓存, 可以跨多个session,即不同的session都可以访问缓存数据。 这个缓存也叫二级缓存。 Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。如果用户觉得hibernate提供的框架框架不好用,自己可以换其他的缓存框架或自己实现缓存框架。 开启二级缓存: list() 默认情况只会放入缓存,不会从一级缓存中取,配置查询缓存,可以让list()查询从二级缓存中取数据。

get: 及时加载,只要调用get方法立刻向数据库查询 load:默认使用懒加载,当用到数据的时候才向数据库查询