求解深入理解hibernate一级缓存机制的理解及spring管理bean的使用

仙人长 2011-07-11 12:49:30
hibernate:
看过很多hibernate缓存的文章,如下面一问题有疑问:
之前本人理解:当跟据ID获取持久对象时首先会从一级缓存找,如果缓存中没有就去数据库查,如果有就直接返回,
但是我在页面测试时每次用同一个ID去取数据,日志信息,hibernate总会发送新sql而且还有执行sql所花时间
spring:
我们将所有的bean将了Spring,通常我们只将action类设为portotype而service层都设置为single
并发情况:用户一和用户二同时执行某个操作他们调用的同一个action的两个实例,但,action里的使用的是同一个service的实例(单例),两个action的参数都不同,这样不会有问题吗。
...全文
128 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenzxl 2011-07-12
  • 打赏
  • 举报
回复
昨天太忙,没跟住,讨论的很激烈啊
仙人长 2011-07-11
  • 打赏
  • 举报
回复
谢了,结贴
xiaomaha 2011-07-11
  • 打赏
  • 举报
回复
你说的action是否是struts2?为什么struts2不能是单例,请baidu\google,别人写的很清楚,我没必要粘贴复制了·
仙人长 2011-07-11
  • 打赏
  • 举报
回复
三个用户执行同一个功能,访问的同一个action产生的不同实例,与此同时,调用的却是同一个service实例,我们为什么只交action设置成原型,而service设置成单例,不怕多用户并发时使用一个对象产生的数据异常吗
用户1 执行 功能一action1 --调用 service1
用户2 执行 功能一action2 --调用 service1
用户3 执行 功能一action3 --调用 service1
xiaomaha 2011-07-11
  • 打赏
  • 举报
回复
service 单例 就不要定义属性变量,如果要定义属性变量就在方法中定义!(公用的除外·)

service\dao层都是定义接口!
仙人长 2011-07-11
  • 打赏
  • 举报
回复
第二问不理解,我们怕action的并发时使用同一个,就不怕service层实例的并发吗?为什么service层的实例不设置成原型,我只知道用,不知期所以然
xiaomaha 2011-07-11
  • 打赏
  • 举报
回复
portotype 就不是单例了··
xiaomaha 2011-07-11
  • 打赏
  • 举报
回复
再补充下 session缓存是open-close之间
xiaomaha 2011-07-11
  • 打赏
  • 举报
回复
1、session缓存涉及到几种状态 自由状态、持久状态、游离状态 具体google下!就明白了

2、spring 2.x 后可以 scope="prototype" 在struts2要用,如果不设置就是单例模式!
仙人长 2011-07-11
  • 打赏
  • 举报
回复
第一问我明白了,谢谢。
第二问不理解我知道action是不会有问题因为它设置为原型,而service层的实例设置成单例了,并发的时候同一个action类的两个action实例,同时操作的一个service层的实例,但是两个action给service实例的参数都不同,这种做法不理解
stevenzxl 2011-07-11
  • 打赏
  • 举报
回复
1.你设置缓存了吗?hibernate缓存的属性是lazy=true就是设置缓存的
另外一级缓存是指存放在session中的,session的有效期很短,你设置session的属性了吗?
一级缓存的命中率是很低的。
2.struct2中每一个action都会产生一个实例,然后它通过struts.xml里面的配置去寻找相应的action
然后通过result返回结果。类似于pojo每一个action都有一个单一的返回对象。
所以不会有问题的~

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧