Log4X

链路纵横
[搬家文]两篇文章(ajax刷新问题,hibernate学习心得)

本地缓存的网页对ajax造成影响

我以前一直采用定义一个小的内容页面作为返回内容的载体,来使用ajax
开发时候常遇到莫名奇妙的问题:明明所有的东西没有一点错误了,但出来的结果仍然有问题或者和以前一样。
我一直没有搞明白怎么回事,好在有一次我误打误撞,在遇到此类问题的时候清除了一次IE的本地缓存,问题居然迎刃而解。
仔细想想大概是因为ajax请求返回的内容页面虽然在表现的时候只是嵌入在主体的页面中,但是还是被ie当作一个单独页面给存了一份,所以你在源码处怎么改,客户端还是以之前的页面为基础产生返回内容。
我准备在内容页面中加入
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
作为临时的解决方法,每次关闭ie清该页面的缓存。
以后研究下不再靠网页作为返回内容的载体,寻求其他方式。

 

[2008-8-13补充]这个问题其实有个最简单的解决方法,即每次提交ajax 请求时,带上一个每次都有变化的参数值就OK了,比如带上 {_:+new Date}这组参数,就能保证每次ajax都取得最新的内容

 

学习hibernate得到的一些零散知识

VO 与 PO
VO在save以后,就成为PO,进入hibernate 持久化缓存。
hibernate查询方法返回值也是PO。
在session关闭后,PO就变成VO。
当session.flush()时,会自动查找所有改变过的PO,以此更新数据库。
因此在 有OpenSessionInViewFilter的view层,改变bo中的值会直接影响到数据库,很好的解释了我以前遇到的怪问题。

何时是从持久层获得数据的?
条件中查询都是直接从数据库得到数据,比如find方法。
指定主键ID来获取单条数据或者迭代Iterate,是会先从持久层中寻找对应数据,找不到再去数据库中找。
(这样说来,在我们的项目中,持久化几乎没有起什么作用阿...)

乐观锁与悲观锁
悲观锁是用setLockMode()方法指定的,放在查询语句之前,查询所得部分的数据将无法修改。

乐观锁在mapping配置中指定 Class 加一个属性 optimistic-lock = "version"
最后还要加一个字段 <version column="version" name="version" type="java.lang.Integer"/>
锁的方法就像版本库的控制一样.

setFetchSize()和setMaxResult()
setMaxResult()返回的list中,只有指定数量的结果。
而setFetchSize()是这样的,一次性向数据库查询的话,就只获得指定数量的结果,当这些结果都被遍历了,需要更多结果时,hibernate再向数据库中读入指定数量的新数据。
据此,我的理解是,setMaxResult主要用于分页,而setFetchSize()则出于性能考量

posted on 2008-08-13 20:41  YYX  阅读(448)  评论(0编辑  收藏  举报