hibernate中load()和get()的区别

本文介绍了Hibernate框架中的两种加载策略:load()与get()方法。load()方法支持延迟加载,适用于需要按需加载关联对象的场景;get()方法则立即加载指定主键的数据,未找到记录时返回null。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序可以通过load()来加载一个持久化实例,这种加载就是根据持久化类的标识属性值加载持久化实例——其实质就是根据逐渐从数据表中加载一条新记录。

User existUser = session.laod(User.class, pk);
上面代码中的pk就是需要加载的持久化实例的标识属性。

如果没有匹配的数据库记录,load()方法可能抛出HibernateException;如果在持久化注解中指定了延迟加载,则load()方法会返回一个未初始化的代理对象(可以理解为持久化对象的替身),这个代理对象并没有加载数据记录,直到程序调用该代理对象的某方法时,Hibernate才会去访问数据库。

如果希望在某对象中创建一个指向另一个对象的关联,又不想从数据库中装载该对象的同时立即装载所关联的全部对象,延迟加载方式就非常有用了。

与load()方法类似的是get()方法,get()方法也用于根据主键加载持久化实例,但get()方法会立刻访问数据库,如果没有对应的记录,get()方法返回null,而不是返回一个代理对象。

load()方法和get()方法主要区别在于是否延迟加载。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值