hibernate get()和load()
Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例。 1. 对于 get(直接取) 方法, hibernate 会确认一下该 id 对应的数据是否存在,首先在 session 缓存中查找, 还没有就查询数据库,数据库中没有就返回 null 。 2. load 方法加载实体对象的时候,根据映射文件上类级别的 lazy 属性的配置 ( 默认为 true) ,分情况讨论: (1) 若为 true, 则首先在 Session 缓存中查找,看看该 id 对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象 ( 该代理类为实体类的子类,由 CGLIB 动态生成 ) 。等到具体使用该对象 ( 除获取 OID 以外 ) 的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个 ObjectNotFoundException 。 (2) 若为 false, 就跟 get 方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个 ObjectNotFoundException 。 这里 get 和 load 有两个重要区别 : load 方法可返回没有加载实体数据的代理类实例,而 get 方法永远返回有实体数据的对象。 ( 对于 load 和 get 方法返回类型:好多书中都说: “get