`

Hibernate的load和get实际应用区分简单实例

阅读更多
今天在看孔浩的CMS视频时候看到的。
在57 -文章管理06 - 文章功能service层的实现


他在写addTopic方法时, 是这么写的。



@Override
	public void add(Topic topic, int cid, int uid, Integer[] aids) {
		Channel c = channelDao.load(cid);
		User u = userDao.load(uid);
		if(c==null||u==null)throw new CmsException("要添加的文章必须有用户和栏目");

.......




这里的问题就在于, load方法是不返回null的, 只有get方法才会返回null。
(孔浩的BaseDao的源码我看了, 里面确实是getSession().load(id) )


看看load的详细说明:
Return the persistent instance of the given entity class with the given identifier, assuming that the instance exists.

You should not use this method to determine if an instance exists (use get() instead). Use this only to retrieve an instance that you assume exists, where non-existence
这里说到, 我们不应该使用load方法来验证一个实例对象是否存在。 如果要验证的话, 应该使用get()方法。


这里我写了个测试类, 直接运行一下, 事实证明确实如此。。



load返回的是代理对象。 当我们运行channel==null的时候,hibernate会直接在代理对象中进行检索。
当查不到对应的数据时, hibernate会直接抛出Object not found的异常,此时代码终止, 不会再抛出我们所定义的异常信息了。


当把查询方法改成get, 就能正常运行了。

以下是get方法的运行结果:





=====================================
验证一个实例对象是否在数据库中存在也可以用createQuery(hql).uniqueResult().
如果不存在这个方法是会返回null的。和load不同,该方法并不返回代理对象。



Object uniqueResult()
                    throws HibernateException
Convenience method to return a single instance that matches the query, or null if the query returns no results.
Returns:
the single result or null
  • 大小: 48.1 KB
  • 大小: 47.4 KB
分享到:
评论

相关推荐

    hibernate中get和load方法的区别

    在Java的持久化框架Hibernate中,`get`和`load`方法都是用于从数据库中获取对象,但它们之间存在一些重要的区别。理解这些差异对于优化应用程序的性能和避免潜在问题至关重要。 首先,`get`方法是直接从数据库中...

    Hibernate查询 load与get的区别及其它查询测试

    `load`和`get`方法是Hibernate中用于检索实体的两种主要方式,它们都是从Session接口中调用,但有明显的区别和各自的适用场景。 1. `load`方法: - `load`方法主要用于根据主键加载对象,它返回一个代理对象,而...

    hibernate入门简单实例

    这个“hibernate_first”压缩包提供了一个适合初学者的简单实例,帮助理解Hibernate的基础用法。以下是关于Hibernate入门的一些关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类的过程,...

    hibernate3+mysql简单学习实例.rar

    `Session`接口是Hibernate的主要工作接口,通过`save()`、`update()`、`delete()`和`get()`、`load()`等方法进行数据的持久化操作。 6. **HQL(Hibernate Query Language)**: HQL是Hibernate的查询语言,类似于SQL...

    hibernate简单实例

    - **读取(Read)**:使用`get()`或`load()`方法根据ID获取实体,或者使用`createQuery()`或`createCriteria()`执行HQL(Hibernate查询语言)或SQL查询。 - **更新(Update)**:修改实体对象的属性后,调用`...

    javahibernate应用举例

    在这个“javahibernate应用举例”中,我们将深入探讨如何利用Hibernate简化Java中的SQL操作,以及如何实现数据的查找和保存功能。 首先,Hibernate通过提供一个API,使得开发人员无需直接编写SQL语句就能进行数据...

    Hibernate应用

    **Hibernate应用详解** ...通过这个小应用,你可以学习到如何在实际项目中集成和使用Hibernate,包括配置、对象持久化、查询等基本操作。理解并熟练掌握Hibernate,能显著提升Java应用程序的开发效率和可维护性。

    Hibernate简单案例

    通过这个简单的案例,你可以了解如何在实际项目中应用 Hibernate,包括设置配置、定义实体类、执行 CRUD 操作等基本步骤。随着对 Hibernate 的深入学习,你会发现更多的高级特性,如二级缓存、关联映射、性能优化等...

    Hibernate5实例程序

    使用`Session`对象进行数据的持久化操作,包括保存(`save()`)、更新(`update()`)、删除(`delete()`)和加载(`load()`或`get()`)。`Transaction`对象用于管理事务,确保数据的一致性。 5. **查询语言(HQL)** ...

    Hibernate3学习笔记(一)-hibernate概述和简单实例入门

    “Hibernate3学习笔记(一)-hibernate概述和简单实例入门” 这个标题表明了本文档将介绍的是关于Hibernate3的基本概念和初步应用。Hibernate3是Java开发中的一个流行对象关系映射(ORM)框架,它简化了数据库操作,将...

    hibernate实例

    在文档中提到的实例演示了如何搭建Hibernate开发环境并创建一个简单的Hibernate应用。通过这个实例,新手可以快速地熟悉Hibernate的基本使用,并为进一步深入学习Hibernate打下良好的基础。 在Hibernate的使用中,...

    用Hibernate做的简单租房网

    在这个项目中,我们主要关注的是Hibernate作为Java对象关系映射(ORM)工具如何简化数据访问层的操作,以及如何在实际应用中与Oracle数据库进行交互。 【描述】"hibernate简单实现租房网"揭示了以下几个关键知识点...

    hibernate最简单的例子,未整合其他框架

    这个压缩包文件“hibernate最简单的例子”提供了一个不涉及其他框架的纯净Hibernate应用实例,非常适合初学者学习和理解Hibernate的基本用法。 1. Hibernate简介: Hibernate是基于Java的开源ORM框架,它通过XML...

    hibernate入门--第一个实例

    - **读取(READ)**: `get()`用于根据ID获取对象,`load()`用于延迟加载,`createQuery()`或`createSQLQuery()`用于执行HQL(Hibernate查询语言)或SQL查询。 - **更新(UPDATE)**: 修改对象属性后,调用`update()`...

    重写hibernate的session简单增删改查

    "重写hibernate的session简单增删改查"是一个针对初学者的实践教程,旨在帮助理解如何在Hibernate中自定义Session的操作,以便更好地控制数据库交互。 一、Hibernate Session Hibernate的Session是与数据库交互的...

    HIbernate与oracle数据库应用例子

    本篇将深入探讨如何在实际项目中结合Hibernate与Oracle数据库进行应用。 一、Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的强大工具。通过ORM,...

    hibernate 简单工程

    总的来说,这个"hibernate 简单工程"为初学者提供了一个直观的实践平台,通过实际操作,你可以更深入地理解Hibernate如何连接数据库,如何映射Java对象到数据库表,以及如何执行各种数据库操作。希望这个工程能帮助...

    Hibernate 应用开发文档+API

    对于数据的增删改查,Hibernate提供了方便的方法,如Session的save()和update()用于持久化对象,delete()用于删除,而load()和get()用于获取对象。HQL(Hibernate Query Language)是Hibernate特有的面向对象的查询...

    hibernate3 hibernate3

    使用get()和load()方法检索对象,使用Criteria或HQL查询对象集合。 5. 提交事务:在一组数据库操作完成后,使用Session的commit()方法提交事务。如果发生错误,可以调用rollback()回滚事务。 6. 关闭Session:每次...

Global site tag (gtag.js) - Google Analytics