通过Hibernate如何获得存在数据库中的数据
我的问题实在不知道怎么问,最近看Hibernate,可是遇到一个问题,所有的教程在讲Hibernate的时候,都是先创建表,然后通过Hibernate的save方法向表中...
我的问题实在不知道怎么问,最近看Hibernate,可是遇到一个问题,所有的教程在讲Hibernate的时候,都是先创建表,然后通过Hibernate的save方法向表中插入一条数据.然后在查.
我的问题出现了,如果表中原先拥有10条数据,这10条数据不是使用Hibernate的save方法插入的,我试过,使用HQL查询所有数据是无法返回包含这10条数据的List,我究竟怎么做才可以呢.
我的问题也许不太清楚,但是还是请好心人帮我回答,需要问什么的,我会进行问题补充的,
先给30分,我保证,被采纳的人我会再追加20分的.
谢谢大家了 展开
我的问题出现了,如果表中原先拥有10条数据,这10条数据不是使用Hibernate的save方法插入的,我试过,使用HQL查询所有数据是无法返回包含这10条数据的List,我究竟怎么做才可以呢.
我的问题也许不太清楚,但是还是请好心人帮我回答,需要问什么的,我会进行问题补充的,
先给30分,我保证,被采纳的人我会再追加20分的.
谢谢大家了 展开
1个回答
展开全部
首先你要了解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语言的不了解。
如果楼主说得仔细点,可能回答也会更详尽些。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询