load和get都是从数据库中查询指定主键的记录 。
相同点:都会先查找session缓存,若缓存中有,则直接返回。
不同点:load认为数据库中一定是有这条记录的,所以若不存在,则先会创建一个代理对象,当真正使用这个对象的数据时,才会再去查询二级缓存和数据库,这就是所谓的延迟加载。若查不到,则返回ObjectNotFoundException。而对于get来说,则会直接依次查找二级缓存和数据库,查不到的话,则直接返回null。

@Test
public void HibernateClose() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
// 无-------到持久化
// session可以关闭
// get 数据库没有相应的值这回返回Null
// Temp temp2 = session.get(Temp.class, "a1");
// System.out.println("get" + temp2);
// 不能关闭session
// load 数据库没有相对应的记录则会返回ObjectNotFoundException
Temp temp1 = session.load(Temp.class, "a1");
System.out.println("load" + temp1);
//关闭
session.close();
//提交
transaction.commit();
}
本文探讨了Hibernate框架中load与get方法的异同。两者都用于查询指定主键的数据库记录,但load采用延迟加载策略,先创建代理对象,实际使用时再查询,查不到会抛出异常;而get则直接查询,查不到返回null。
1656

被折叠的 条评论
为什么被折叠?



