hql查询时传参

hql查询时传的参数在数据库没有,老报错。
例如
Question q = em.find(Question.class, 102);
我想问一下
传的参数数据库没有查出来的结果是不是null啊?

6个回答

Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于:

 1.如果找不到符合条件的纪录,get()方法将返回null.而load()将会报出ObjectNotFoundEcception.

 2.load()方法可以返回实体的代理类实例,而get()永远只返回实体类.

3.load()方法可以充分利用二级缓存和内部缓存的现有数据,而get()方法只在内部缓存中进行查找,如没有发现对应数据将跳过二级缓存,直接调用SQL完成查找.

空指针异常?

没有结果当然是null了 你报的什么错? 你可以把查询的结果用debug看下 或者打印出来 判断下是不是为空啊

楼主的问题有点不清楚,所以不好分析,
我一般都用Query查询的,如果结果为空,返回的也是list,只是list.size()==0,并不是null。不知道这是不是你想要的答案。

其实这要分情况的。比如get load去加载数据库。一个是返加null.一个是报空指针。你这个其实说实话我也不太清楚。你可以去查看一下相关的底层实现。。祝你早日解决问题!

1.load()检索不到的话会抛出org.hibernate.ObjectNotFoundException异常;
2.get()检索不到的话会返回null,get()和find()都是直接从数据库中检索;
结论:hibernate对于load()认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get()和find(),hibernate一定要获取到真实的数据,否则返回null。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐