load()与get()方法的关键区别:

load()与get()方法的区别:

load() 方法查询数据时会先从session缓存(一级缓存)中查找,如果没有找到则会创建代理类,该代理类仅仅初始化了

OID属性,当第一次访问其他属性值时, 则会依次从二级缓存-->数据库查找,直到找到数据,最后将所有属性值赋给代理类。

而get()方法则会直接按照一级缓存-->二级缓存 -->数据库的顺序查找。get()返回的不一定是实体,也可能是代

理类对象。

import org.hibernate.Session;

import org.hibernate.Transaction;

import util.HibernateUtil;

import entity.Person;

public class test {

public static void main(String[] args) {

Person p = new Person();

p.setId(6);

p.setName("li4");

Session session=HibernateUtil.getSession();

Transaction ts = session.beginTransaction();

//session.update(p);

//ts.commit();

Person t = (Person)session.get(Person.class,6);

System.out.println(t.getId());

System.out.println(t.getName());

session.close();

}

}

把get()和load()方法更换之后,观察输出变化,有无sql语句,和先后顺序。

时间: 2024-08-29 21:42:50

load()与get()方法的关键区别:的相关文章

Hibernate的load和get方法的区别

这次我们聊一下Hibernate3.2 Session加载数据时get和load方法的区别,我总结的如下: 1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库数据库中没有就返回null.这个相对比较简单,也没有太大的争议.主要要说明的一点就是在这个版本中get方法也会查找二级缓存! 2.  load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论: (1

Hibernate 关于load和get方法区别

load和个体方法都可以充分利用内部缓存和二级缓存中的现有数据. ************************************************************************** Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException. Load方法可返回实体的代理类实例,

细说OC中的load和initialize方法

OC中有两个特殊的类方法,分别是load和initialize.本文总结一下这两个方法的区别于联系.使用场景和注意事项.Demo可以在我的Github上找到——load和initialize,如果觉得有帮助还望点个star以示支持,总结在文章末尾. load 顾名思义,load方法在这个文件被程序装载时调用.只要是在Compile Sources中出现的文件总是会被装载,这与这个类是否被用到无关,因此load方法总是在main函数之前调用. 调用规则 如果一个类实现了load方法,在调用这个方法

Javascript中call方法和apply方法用法和区别

第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助. 连续几天阅读<javascript高级程序设计>这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点.今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面: 1.call()和apply()的作用和用法 2.什么时候用apply(),什么时候用call() 书上提到,每个函数都包含两个非继承而来

方法重写与方法重载的区别

一.方法重写(0veriding) 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖. 重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富.在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法. 在Java中覆盖继承父类的方法就是通过方法的重写来实现的.

C#虚方法和抽象方法区别

虚方法: 1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.2.virtual方法可以直接使用,和普通方法一样.3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写.virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别相应的sealed关键字标示此方法不可以被重写 抽象方法: 1.抽象方法没有提供实现部分. 2.抽象方法只能在抽象类

网络工程 POST与GET请求方法的本质区别

POST与GET请求方法的本质区别: 第一:GET用于信息获取,它是安全的(这里安全的含义是指非修改信息),而POST是用于修改服务器上资源的请求 第二:GET请求的数据会附在URL之后,而POST把提交的数据则放置在HTTP报文实体的主体里,所以,POST的安全性要比GET的安全性高 第三:对于POST的请求数据量比GET高是个误区,真正影响请求数据量的是服务器,服务器的限制才是真正的原因.

html()和text()这两个jQuery方法有什么区别

html()和text()这两个jQuery方法有什么区别:标题中的两个方法是jQuery非常常用的两个方法,并且有时候作用似乎是一模一样的,其实这只是一种假象而已,下面结合实例来介绍一下他们的区别,首先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www

jquery中使元素显示和隐藏方法之间的区别

在实际的项目开发中,要使一个元素隐藏的方法有很多,比如css的多种属性和jquery的多种方法,虽然他们的作用都是使元素不可见,但是各个方法实现的原理是不一样的.下面主要介绍jquery各个元素隐藏方法之间的区别. 1.show()和hide() 使用hide()方法隐藏元素实际上是同时减少元素的高度.宽度以及不透明度,直到这三个属性为0,最后设置元素的css属性disolay:none.show()方法从上到下增大元素的高度,从左到右增大元素的宽度,同时增加内容的不透明度,直至元素完全显示.