通过Hibernate如何获得存在数据库中的数据?
答案:1 悬赏:30
解决时间 2021-01-24 02:18
- 提问者网友:浩歌待明月
- 2021-01-23 17:37
通过Hibernate如何获得存在数据库中的数据?
最佳答案
- 二级知识专家网友:慢性怪人
- 2021-01-23 19:06
首先你要了解Hibernate的原理。
如果要用Hibernate,就不要再存在着增、删、改、查这些关系型数据库的概念。
在ORM,或者说在Hibernate的世界中,对象分成三个状态。
临时状态,游离状态,持久状态。
调用session的load方法,也就是加载一个持久状态的对象。从哪里加载?
数显从session的缓存里加载(当然一般session的缓存都是没有的),如果找不到,就去二级缓存里加载(前提是你配置了二级缓存)。如果二级缓存也没有,这时候会去持久化的载体里去加载,当然这个载体一般来说就是数据库。
如果数据库里也没有,当然返回null
所以load跟save没有本质上的关系,也没有依赖关系。save只是把一个临时对象先持久化到内存里,当session关闭时,再把内存里的状态持久化到数据库里罢了。
楼主的问题我不太看得明白。
使用HQL查询所有数据是无法返回包含这10条数据的List。
这个意思到底是:
1:我要返回所有实体对象,但是不包括最开始我手动插入的那10个。但是它给我返回了。
2:我要返回所有对象,包括我最开始手动插入的那10个,但是没有给我返回。
如果是1:Hibernate是无法准确判断这些数据是用户手动插入的或是通过save方法持久化的。所以只能利用id或者另外一些属性特征去判断。
如果是2:应该是不可能,如果要检索所有对象,不管它在缓存中,还是在数据库中,都是可以检索出来的。除非它不存在。
2出现的原因,可能是对于HQL语言的不了解。
如果楼主说得仔细点,可能回答也会更详尽些。
如果要用Hibernate,就不要再存在着增、删、改、查这些关系型数据库的概念。
在ORM,或者说在Hibernate的世界中,对象分成三个状态。
临时状态,游离状态,持久状态。
调用session的load方法,也就是加载一个持久状态的对象。从哪里加载?
数显从session的缓存里加载(当然一般session的缓存都是没有的),如果找不到,就去二级缓存里加载(前提是你配置了二级缓存)。如果二级缓存也没有,这时候会去持久化的载体里去加载,当然这个载体一般来说就是数据库。
如果数据库里也没有,当然返回null
所以load跟save没有本质上的关系,也没有依赖关系。save只是把一个临时对象先持久化到内存里,当session关闭时,再把内存里的状态持久化到数据库里罢了。
楼主的问题我不太看得明白。
使用HQL查询所有数据是无法返回包含这10条数据的List。
这个意思到底是:
1:我要返回所有实体对象,但是不包括最开始我手动插入的那10个。但是它给我返回了。
2:我要返回所有对象,包括我最开始手动插入的那10个,但是没有给我返回。
如果是1:Hibernate是无法准确判断这些数据是用户手动插入的或是通过save方法持久化的。所以只能利用id或者另外一些属性特征去判断。
如果是2:应该是不可能,如果要检索所有对象,不管它在缓存中,还是在数据库中,都是可以检索出来的。除非它不存在。
2出现的原因,可能是对于HQL语言的不了解。
如果楼主说得仔细点,可能回答也会更详尽些。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯