??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码久久精品色欲,亚洲高清视频一视频二视频三,亚洲欧洲国产综合AV无码久久http://www.tkk7.com/sway/category/35514.html彪悍的h生不需要解释,彪悍的代码不需要测试?/description>zh-cnFri, 16 Jan 2009 09:40:44 GMTFri, 16 Jan 2009 09:40:44 GMT60hibernate二~存ȝ(javaeye)http://www.tkk7.com/sway/archive/2008/11/05/238864.htmlKevin.ZhongKevin.ZhongWed, 05 Nov 2008 09:59:00 GMThttp://www.tkk7.com/sway/archive/2008/11/05/238864.htmlhttp://www.tkk7.com/sway/comments/238864.htmlhttp://www.tkk7.com/sway/archive/2008/11/05/238864.html#Feedback0http://www.tkk7.com/sway/comments/commentRss/238864.htmlhttp://www.tkk7.com/sway/services/trackbacks/238864.html 我的l验主要来自hibernate2.1版本Q基本原理和3.0?.1是一LQ请原谅我的固不化?

hibernate的session提供了一U缓存,每个sessionQ对同一个idq行两次loadQ不会发送两条sqll数据库Q但是session关闭的时候,一U缓存就失效了?

二~存是SessionFactoryU别的全局~存Q它底下可以使用不同的缓存类库,比如ehcache、oscache{,需要设|hibernate.cache.provider_classQ我们这里用ehcacheQ在2.1中就?
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider
如果使用查询~存Q加?
hibernate.cache.use_query_cache=true


~存可以单的看成一个MapQ通过key在缓存里面找value?

Class的缓?/strong>
对于一条记录,也就是一个PO来说Q是ҎID来找的,~存的key是IDQvalue是POJO。无论listQloadq是 iterateQ只要读Z个对象,都会填充~存。但是list不会使用~存Q而iterate会先取数据库select id出来Q然后一个id一个id的loadQ如果在~存里面有,׃~存取,没有的话去数据库load。假设是d~存Q需要设|:
<cache usage="read-write"/>
如果你用的二~存实现是ehcache的话Q需要配|ehcache.xml
<cache name="com.xxx.pojo.Foo" maxElementsInMemory="500" eternal="false" timeToLiveSeconds="7200" timeToIdleSeconds="3600" overflowToDisk="true" />
其中eternal表示~存是不是永q不时QtimeToLiveSeconds是缓存中每个元素Q这里也是一个POJOQ的时旉Q如 果eternal="false"Q超q指定的旉Q这个元素就被移C。timeToIdleSeconds是发呆时_是可选的。当往~存里面put 的元素超q?00个时Q如果overflowToDisk="true"Q就会把~存中的部分数据保存在硬盘上的时文仉面?
每个需要缓存的class都要q样配置。如果你没有配置Qhibernate会在启动的时候警告你Q然后用defaultCache的配|,q样多个class会共享一个配|?
当某个ID通过hibernate修改Ӟhibernate会知道,于是U除~存?
q样大家可能会想Q同L查询条gQ第一ơ先listQ第二次再iterateQ就可以使用到缓存了。实际上q是很难的,因ؓ你无法判断什么时? 是第一ơ,而且每次查询的条仉常是不一LQ假如数据库里面?00条记录,id??00Q第一ơlist的时候出了前50个idQ第二次 iterate的时候却查询?0?0号idQ那?0-50是从~存里面取的Q?1?0是从数据库取的,共发?+20条sql。所以我一直认? iterate没有什么用QL会有1+N的问题?
Q题外话Q有说法说大型查询用list会把整个l果集装入内存,很慢Q而iterate只select id比较好,但是大型查询L要分|的,谁也不会真的把整个结果集装进来,假如一?0条的话,iterate共需要执?1条语句,list虽然选择 若干字段Q比iterateW一条select id语句慢一些,但只有一条语句,不装入整个结果集hibernateq会Ҏ数据库方a做优化,比如使用mysql的limitQ整体看来应该还? list快。)
如果惌对list或者iterate查询的结果缓存,p用到查询~存?

查询~存
首先需要配|hibernate.cache.use_query_cache=true
如果用ehcacheQ配|ehcache.xmlQ注意hibernate3.0以后不是net.sf的包名了
<cache name="net.sf.hibernate.cache.StandardQueryCache"
   maxElementsInMemory="50" eternal="false" timeToIdleSeconds="3600"
   timeToLiveSeconds="7200" overflowToDisk="true"/>
<cache name="net.sf.hibernate.cache.UpdateTimestampsCache"
   maxElementsInMemory="5000" eternal="true" overflowToDisk="true"/>
然后
query.setCacheable(true);//ȀzL询缓?
query.setCacheRegion("myCacheRegion");//指定要用的cacheRegionQ可?
W二行指定要使用的cacheRegion是myCacheRegionQ即你可以给每个查询~存做一个单独的配置Q用setCacheRegion来做q个指定Q需要在ehcache.xml里面配置它:
<cache name="myCacheRegion" maxElementsInMemory="10" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200" overflowToDisk="true" />
如果省略W二行,不设|cacheRegion的话Q那么会使用上面提到的标准查询缓存的配置Q也是net.sf.hibernate.cache.StandardQueryCache

对于查询~存来说Q缓存的key是根据hql生成的sqlQ再加上参数Q分늭信息Q可以通过日志输出看到Q不q它的输Z是很可读Q最好改一下它的代码)?
比如hqlQ?
from Cat c where c.name like ?
生成大致如下的sqlQ?
select * from cat c where c.name like ?
参数?tiger%"Q那么查询缓存的key*大约*是这L字符Ԍ我是凭记忆写的,q不_Q不q看了也该明白了Q:
select * from cat c where c.name like ? , parameter:tiger%
q样Q保证了同样的查询、同L参数{条件下h一Lkey?
现在说说~存的valueQ如果是list方式的话Qvalue在这里ƈ不是整个l果集,而是查询出来的这一串ID。也是_不管是list? 法还是iterateҎQ第一ơ查询的时候,它们的查询方式很它们qx的方式是一LQlist执行一条sqlQiterate执行1+N条,多出来的 行ؓ是它们填充了~存。但是到同样条gW二ơ查询的时候,都和iterate的行Z样了Q根据缓存的keyȝ存里面查CvalueQvalue? 一串idQ然后在到class的缓存里面去一个一个的load出来。这样做是ؓ了节U内存?
可以看出来,查询~存需要打开相关cȝclass~存。list和iterateҎW一ơ执行的时候,都是既填充查询缓存又填充class~存的?
q里q有一个很Ҏ被忽视的重要问题Q即打开查询~存以后Q即使是listҎ也可能遇?+N的问题!相同 条gW一ơlist的时候,因ؓ查询~存中找不到Q不class~存是否存在数据QL发送一条sql语句到数据库获取全部数据Q然后填充查询缓存和 class~存。但是第二次执行的时候,问题来了,如果你的class~存的超时时间比较短Q现在class~存都超时了Q但是查询缓存还在,那么 listҎ在获取id串以后,会一个一个去数据库loadQ因此,class~存的超时时间一定不能短于查询缓存设|的时旉Q如果还讄了发呆时 间的话,保证class~存的发呆时间也大于查询的缓存的生存旉。这里还有其他情况,比如class~存被程序强制evict了,q种情况p自己注意 了?

另外Q如果hql查询包含select字句Q那么查询缓存里面的value是整个l果集了?

当hibernate更新数据库的时候,它怎么知道更新哪些查询~存呢?
hibernate在一个地方维护每个表的最后更新时_其实也就是放在上面net.sf.hibernate.cache.UpdateTimestampsCache所指定的缓存配|里面?
当通过hibernate更新的时候,hibernate会知道这ơ更新媄响了哪些表。然后它更新q些表的最后更新时间。每个缓存都有一个生成时 间和q个~存所查询的表Q当hibernate查询一个缓存是否存在的时候,如果~存存在Q它q要取出~存的生成时间和q个~存所查询的表Q然后去查找q? 些表的最后更新时_如果有一个表在生成时间后更新q了Q那么这个缓存是无效的?
可以看出Q只要更新过一个表Q那么凡是涉及到q个表的查询~存失效了Q因此查询缓存的命中率可能会比较低?

Collection~存
需要在hbm的collection里面讄
<cache usage="read-write"/>
假如class是CatQcollection叫childrenQ那么ehcache里面配置
<cache name="com.xxx.pojo.Cat.children"
   maxElementsInMemory="20" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200"
   overflowToDisk="true" />
Collection的缓存和前面查询~存的list一P也是只保持一串idQ但它不会因个表更新q就失效Q一个collection~存仅在q个collection里面的元素有增删时才失效?
q样有一个问题,如果你的collection是根据某个字D|序的Q当其中一个元素更C该字D|Q导致顺序改变时Qcollection~存里面的顺序没有做更新?

~存{略
只读~存Qread-onlyQ:没有什么好说的
?写缓存(read-writeQ?E序可能要的更新数据
不严格的?写缓存(nonstrict-read-writeQ:需要更新数据,但是两个事务更新同一条记录的可能性很,性能比读写缓存好
事务~存QtransactionalQ:~存支持事务Q发生异常的时候,~存也能够回滚,只支持jta环境Q这个我没有怎么研究q?

d~存和不严格d~存在实C的区别在于,d~存更新~存的时候会把缓存里面的数据换成一个锁Q其他事务如果去取相应的~存数据Q发现被锁住了,然后q接取数据库查询?
在hibernate2.1的ehcache实现中,如果锁住部分~存的事务发生了异常Q那么缓存会一直被锁住Q直?0U后时?
不严D写缓存不锁定~存中的数据?


使用二~存的前|条?/strong>
你的hibernateE序Ҏ据库有独占的写访问权Q其他的q程更新了数据库Qhibernate是不可能知道的。你操作数据库必需直接通过 hibernateQ如果你调用存储q程Q或者自׃用jdbc更新数据库,hibernate也是不知道的。hibernate3.0的大扚w更新和删 除是不更CU缓存的Q但是据?.1已经解决了这个问题?
q个限制相当的棘手,有时候hibernate做批量更新、删除很慢,但是你却不能自己写jdbc来优化,很郁闷吧?
SessionFactory也提供了U除~存的方法,你一定要自己写一些JDBC的话Q可以调用这些方法移除缓存,q些Ҏ是:
void evict(Class persistentClass)
          Evict all entries from the second-level cache.
void evict(Class persistentClass, Serializable id)
          Evict an entry from the second-level cache.
void evictCollection(String roleName)
          Evict all entries from the second-level cache.
void evictCollection(String roleName, Serializable id)
          Evict an entry from the second-level cache.
void evictQueries()
          Evict any query result sets cached in the default query cache region.
void evictQueries(String cacheRegion)
          Evict any query result sets cached in the named query cache region.
不过我不q样做,因ؓq样很难l护。比如你现在用JDBC扚w更新了某个表Q有3个查询缓存会用到q个表,? evictQueries(String cacheRegion)U除?个查询缓存,然后用evict(Class persistentClass)U除了class~存Q看上去好像完整了。不q哪天你d了一个相x询缓存,可能会忘记更新这里的U除代码。如果你? jdbc代码到处都是Q在你添加一个查询缓存的时候,q知道其他什么地方也要做相应的改动吗Q?

----------------------------------------------------

ȝQ?/strong>
不要惛_然的以ؓ~存一定能提高性能Q仅仅在你能够驾驭它q且条g合适的情况下才是这L。hibernate的二U缓存限制还是比较多的,不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下ؕ用,可能会有1+N的问题。不当的使用q可能导致读数据?
如果受不了hibernate的诸多限Ӟ那么q是自己在应用程序的层面上做~存吧?
在越高的层面上做~存Q效果就会越好。就好像管盘有缓存,数据库还是要实现自己的缓存,管数据库有~存Q咱们的应用E序q是要做~存。因? 底层的缓存它q不知道高层要用q些数据q什么,只能做的比较通用Q而高层可以有针对性的实现~存Q所以在更高的别上做缓存,效果也要好些吧?


l于写完了,好篏……

Kevin.Zhong 2008-11-05 17:59 发表评论
]]>
c3p0属性详?/title><link>http://www.tkk7.com/sway/archive/2008/11/05/238860.html</link><dc:creator>Kevin.Zhong</dc:creator><author>Kevin.Zhong</author><pubDate>Wed, 05 Nov 2008 09:29:00 GMT</pubDate><guid>http://www.tkk7.com/sway/archive/2008/11/05/238860.html</guid><wfw:comment>http://www.tkk7.com/sway/comments/238860.html</wfw:comment><comments>http://www.tkk7.com/sway/archive/2008/11/05/238860.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sway/comments/commentRss/238860.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sway/services/trackbacks/238860.html</trackback:ping><description><![CDATA[<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000ff;"><</span><span style="color: #800000;">c3p0-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">default-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">当连接池中的q接耗尽的时候c3p0一ơ同时获取的q接数。Default: 3 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="acquireIncrement"</span><span style="color: #0000ff;">></span><span style="color: #000000;">3</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">定义在从数据库获取新q接p|后重复尝试的ơ数。Default: 30 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="acquireRetryAttempts"</span><span style="color: #0000ff;">></span><span style="color: #000000;">30</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">两次q接中间隔时_单位毫秒。Default: 1000 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="acquireRetryDelay"</span><span style="color: #0000ff;">></span><span style="color: #000000;">1000</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">q接关闭旉认将所有未提交的操作回滚。Default: false </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="autoCommitOnClose"</span><span style="color: #0000ff;">></span><span style="color: #000000;">false</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">c3p0徏一张名为Test的空表,q用其自带的查询语句进行测试。如果定义了q个参数那么<br /> 属性preferredTestQuery被忽略。你不能在这张Test表上q行M操作Q它只供c3p0试<br /> 使用。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="automaticTestTable"</span><span style="color: #0000ff;">></span><span style="color: #000000;">Test</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">获取q接p|会引v所有等待连接池来获取连接的U程抛出异常。但是数据源仍有?br /> 保留Qƈ在下ơ调用getConnection()的时候l尝试获取连接。如果设为trueQ那么在试<br /> 获取q接p|后该数据源将x已断开q永久关闭。Default: false</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="breakAfterAcquireFailure"</span><span style="color: #0000ff;">></span><span style="color: #000000;">false</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">当连接池用完时客L调用getConnection()后等待获取新q接的时_时后将抛出<br /> SQLException,如设?则无限期{待。单位毫U。Default: 0 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="checkoutTimeout"</span><span style="color: #0000ff;">></span><span style="color: #000000;">100</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">通过实现ConnectionTester或QueryConnectionTester的类来测试连接。类名需制定全\径?br /> Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="connectionTesterClassName"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">指定c3p0 libraries的\径,如果Q通常都是q样Q在本地卛_获得那么无需讄Q默认null卛_<br /> Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="factoryClassLocation"</span><span style="color: #0000ff;">></span><span style="color: #000000;">null</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.<br /> Q文档原文)作者强烈徏议不使用的一个属?/span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="forceIgnoreUnresolvedTransactions"</span><span style="color: #0000ff;">></span><span style="color: #000000;">false</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">?0U检查所有连接池中的I闲q接。Default: 0 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="idleConnectionTestPeriod"</span><span style="color: #0000ff;">></span><span style="color: #000000;">60</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">初始化时获取三个q接Q取值应在minPoolSize与maxPoolSize之间。Default: 3 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="initialPoolSize"</span><span style="color: #0000ff;">></span><span style="color: #000000;">3</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">最大空闲时?60U内未用则q接被丢弃。若?则永不丢弃。Default: 0 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxIdleTime"</span><span style="color: #0000ff;">></span><span style="color: #000000;">60</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">q接池中保留的最大连接数。Default: 15 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxPoolSize"</span><span style="color: #0000ff;">></span><span style="color: #000000;">15</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">JDBC的标准参敎ͼ用以控制数据源内加蝲的PreparedStatements数量。但׃预缓存的statements<br /> 属于单个connection而不是整个连接池。所以设|这个参数需要考虑到多斚w的因素?br /> 如果maxStatements与maxStatementsPerConnection均ؓ0Q则~存被关闭。Default: 0</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxStatements"</span><span style="color: #0000ff;">></span><span style="color: #000000;">100</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxStatementsPerConnection"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">c3p0是异步操作的Q缓慢的JDBC操作通过帮助q程完成。扩展这些操作可以有效的提升性能<br /> 通过多线E实现多个操作同时被执行。Default: 3</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="numHelperThreads"</span><span style="color: #0000ff;">></span><span style="color: #000000;">3</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">当用戯用getConnection()时root用户成ؓ去获取连接的用户。主要用于连接池q接非c3p0<br /> 的数据源时。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="overrideDefaultUser"</span><span style="color: #0000ff;">></span><span style="color: #000000;">root</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">与overrideDefaultUser参数对应使用的一个参数。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="overrideDefaultPassword"</span><span style="color: #0000ff;">></span><span style="color: #000000;">password</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">密码。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="password"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">定义所有连接测试都执行的测试语句。在使用q接试的情况下q个一显著提高试速度。注意:<br /> 试的表必须在初始数据源的时候就存在。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="preferredTestQuery"</span><span style="color: #0000ff;">></span><span style="color: #000000;">select id from test where id=1</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">用户修改pȝ配置参数执行前最多等?00U。Default: 300 </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="propertyCycle"</span><span style="color: #0000ff;">></span><span style="color: #000000;">300</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">因性能消耗大请只在需要的时候用它。如果设为true那么在每个connection提交?br /> 时候都校验其有效性。徏议用idleConnectionTestPeriod或automaticTestTable<br /> {方法来提升q接试的性能。Default: false </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="testConnectionOnCheckout"</span><span style="color: #0000ff;">></span><span style="color: #000000;">false</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">如果设ؓtrue那么在取得连接的同时校验连接的有效性。Default: false </span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="testConnectionOnCheckin"</span><span style="color: #0000ff;">></span><span style="color: #000000;">true</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">用户名。Default: null</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="user"</span><span style="color: #0000ff;">></span><span style="color: #000000;">root</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #008000;"><!--</span><span style="color: #008000;">早期的c3p0版本对JDBC接口采用动态反代理。在早期版本用途广泛的情况下这个参?br /> 允许用户恢复到动态反代理以解决不稳定的故障。最新的非反代理更快ƈ且已l开?br /> q泛的被使用Q所以这个参数未必有用。现在原先的动态反与新的非反代理同时受?br /> 支持Q但今后可能的版本可能不支持动态反代理。Default: false</span><span style="color: #008000;">--></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="usesTraditionalReflectiveProxies"</span><span style="color: #0000ff;">></span><span style="color: #000000;">false</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> <br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="automaticTestTable"</span><span style="color: #0000ff;">></span><span style="color: #000000;">con_test</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="checkoutTimeout"</span><span style="color: #0000ff;">></span><span style="color: #000000;">30000</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="idleConnectionTestPeriod"</span><span style="color: #0000ff;">></span><span style="color: #000000;">30</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="initialPoolSize"</span><span style="color: #0000ff;">></span><span style="color: #000000;">10</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxIdleTime"</span><span style="color: #0000ff;">></span><span style="color: #000000;">30</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxPoolSize"</span><span style="color: #0000ff;">></span><span style="color: #000000;">25</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="minPoolSize"</span><span style="color: #0000ff;">></span><span style="color: #000000;">10</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxStatements"</span><span style="color: #0000ff;">></span><span style="color: #000000;">0</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">user-overrides </span><span style="color: #ff0000;">user</span><span style="color: #0000ff;">="swaldman"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">user-overrides</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">default-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">named-config </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="dumbTestConfig"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxStatements"</span><span style="color: #0000ff;">></span><span style="color: #000000;">200</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">user-overrides </span><span style="color: #ff0000;">user</span><span style="color: #0000ff;">="poop"</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"><</span><span style="color: #800000;">property </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxStatements"</span><span style="color: #0000ff;">></span><span style="color: #000000;">300</span><span style="color: #0000ff;"></</span><span style="color: #800000;">property</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">user-overrides</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">named-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"><br /> </span><span style="color: #0000ff;"></</span><span style="color: #800000;">c3p0-config</span><span style="color: #0000ff;">></span><span style="color: #000000;"> <br /> </span></div> <img src ="http://www.tkk7.com/sway/aggbug/238860.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sway/" target="_blank">Kevin.Zhong</a> 2008-11-05 17:29 <a href="http://www.tkk7.com/sway/archive/2008/11/05/238860.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 参数讄一览表 http://www.tkk7.com/sway/archive/2008/11/05/238836.htmlKevin.ZhongKevin.ZhongWed, 05 Nov 2008 08:03:00 GMThttp://www.tkk7.com/sway/archive/2008/11/05/238836.htmlhttp://www.tkk7.com/sway/comments/238836.htmlhttp://www.tkk7.com/sway/archive/2008/11/05/238836.html#Feedback0http://www.tkk7.com/sway/comments/commentRss/238836.htmlhttp://www.tkk7.com/sway/services/trackbacks/238836.html 属性名 用? Dialectcd允许Hibernate针对特定的关pL据库生成优化的SQL. 取?hibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把debug?eg. false true | hibernate.default_schema 在生成的SQL? 给定的schema/tablespace附加于非全限定名的表名上. 取?hibernate.default_catalog 在生成的SQL? 给定的catalog附加于非全限定名的表名上. 取?hibernate.session_factory_name jndi/composite/name 0意味着关闭默认的外连接抓? 取??tt>3之间取? 4, 16 SessionFactory打开的所有Session指定默认的实体表现模? 取?dom4j, hibernate.order_updates 强制Hibernate按照被更新数据的主键QؓSQL更新排序。这么做减在高ƈ发系l中事务的死锁?取?false true | hibernate.use_identifer_rollback 如果开? 在对象被删除时生成的标识属性将被重设ؓ默认? 取?false false. 取?false

?nbsp;3.4.  Hibernate JDBC和连?connection)属?

属性名 用?
Statement.setFetchSize()).
5?tt>hibernate.jdbc.batch_versioned_data 如果你想让你的JDBC驱动?tt>true(开启这个选项通常是安全的). 同时QHibernateؓ自动版本化的数据使用扚wDML. 默认gؓtrue | hibernate.jdbc.factory_class 选择一个自定义?tt>classname.of.Batcher
true | hibernate.jdbc.use_streams_for_binary 在JDBCdserializable (可序列化) 的类型时使用?stream)(pȝU属?. 取?false
PreparedStatement.getGeneratedKeys() 来获取数据库生成的key(?。需要JDBC3+驱动和JRE1.4+, 如果你的数据库驱动在使用Hibernate的标 识生成器旉到问题,请将此D为false. 默认情况下将使用q接的元数据来判定驱动的能力. 取?hibernate.connection.provider_class 自定?tt>classname.of.ConnectionProvider
java.sql.Connection来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离U别. 取?hibernate.connection.autocommit 允许被缓存的JDBCq接开启自动提?autocommit) (不徏?. 取?false
after_statement, q样在每ơJDBC调用后,都会d的释放连? 对于非JTA的连? 使用autoؓJTA和CMT事务{略选择after_transaction. 取?after_transaction | auto
propertyName传递到hibernate.jndi.<propertyName> 属?tt>InitialContextFactory中去.

?nbsp;3.5.  Hibernate~存属?

属性名 用?
CacheProvider的类? 取?hibernate.cache.use_minimal_puts 以频J的L作ؓ代h, 优化二~存来最化写操? 在Hibernate3中,q个讄对的集群~存非常有用, 寚w缓存的实现而言Q默认是开启的. 取?hibernate.cache.use_query_cache 允许查询~存, 个别查询仍然需要被讄为可~存? 取?hibernate.cache.use_second_level_cache 能用来完全禁止用二U缓? 寚w些在cȝ映射定义中指?tt>true|false
QueryCache接口的类? 默认为内建的classname.of.QueryCache
prefix
true|false

?nbsp;3.6.  Hibernate事务属?

属性名 用?
TransactionFactory的类? 用于Hibernate JDBCTransactionFactory). 取?jta.UserTransaction 一个JNDI名字Q被UserTransaction. 取?hibernate.transaction.manager_lookup_class 一?tt>classname.of.TransactionManagerLookup
true | hibernate.transaction.auto_close_session 如果开? session在事务完成后被自动关闭?现在更好的方法是使用自动session上下文管理。取?false

?nbsp;3.7.  其他属?

属性名 用?
jta | custom.Class
org.hibernate.hql.ast.ASTQueryTranslatorFactory or hibernate.query.substitutions Hibernate查询中的W号映射到SQL查询中的W号 (W号可能是函数名或常量名?. 取?hibernate.hbm2ddl.auto ?tt>create-drop?在显式关?tt>validate | create | hibernate.cglib.use_reflection_optimizer 开启CGLIB来替代运行时反射机制(pȝU属?. 反射机制有时在除错时比较有用. 注意即关闭q个优化, Hibernateq是需要CGLIB. 你不能在true | hibernate.dialect属性设|成正确?hibernate.dialect)

RDBMS 方言
DB2 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FirebirdDialect

?nbsp;3.9.  Hibernate日志cd

cd 功能
org.hibernate.type 为所有JDBC参数记录日志
org.hibernate.pretty 在session清洗(flush)Ӟ为所有与其关联的实体(最?0?的状态记录日?
org.hibernate.transaction Z务相关的zd记录日志
org.hibernate.hql.AST 在解析查询的时?记录HQL和SQL的AST分析日志
org.hibernate ZQ何Hibernate相关信息做日?(信息量较? 但对查错非常有帮?

?nbsp;3.10. JTA TransactionManagers

Transaction工厂c? 应用E序服务?
JBoss
Weblogic
WebSphere
WebSphere 6
Orion
Resin
JOTM
JOnAS
JRun4
Borland ES


Kevin.Zhong 2008-11-05 16:03 发表评论
]]>hibernateW记http://www.tkk7.com/sway/archive/2008/10/26/236743.htmlKevin.ZhongKevin.ZhongSun, 26 Oct 2008 11:48:00 GMThttp://www.tkk7.com/sway/archive/2008/10/26/236743.htmlhttp://www.tkk7.com/sway/comments/236743.htmlhttp://www.tkk7.com/sway/archive/2008/10/26/236743.html#Feedback0http://www.tkk7.com/sway/comments/commentRss/236743.htmlhttp://www.tkk7.com/sway/services/trackbacks/236743.html
2.l测试发?hibernate在保存querycachel果集的时?会保存相兌的数?当在user对象上设|缓存时.
假设:该条l果集的id?23
select * from user where name = 'sway'
hibernate不光保存该条sql语句的结果集,q会保存id=123的user对象(相当于select * from user where id=123).

3.奇怪的问题Q代码如?br /> pMenuItem.getChilds().clear();hibernate延迟加蝲不能?br />
Ҏ
if (!pMenuItem.getChilds().isEmpty()) {
     pMenuItem.getChilds().clear();
}
hibernate开始调数据库。原因不明?br />


Kevin.Zhong 2008-10-26 19:48 发表评论
]]>
վ֩ģ壺 һëƬշ| ձ| һëƬ| ޹ۺϾƷ| ձþþѸ| AV뾫ƷëƬ| ŮҹëƬƵ | þ˾þۺ| ߾Ʒ| ޹ƷƬ߹ۿ| ھƷ99Ѹ| þþƷҹɫA| | Ʒһ| վѹۿ| Ƶֻ| jlzzjlzz߲| þþƷձҰ | պ˾Ʒձ| ޹˾Ʒþþùһ | þѹۿ99Ʒ| Ʒ޾Ʒպѷ| Ʒ˳վ| þ99ڹ| avŷǮ| aһëƬ| ɫŮһ˿| ѻվ߿| ĻþþƷ| ѹۿһëƬa| ɫƷva߹ۿƵ | Դ߹ۿѸ| ӰԺҹײ| 㽶þۺӰ| 㽶97ѹ| jizz߹ۿ| ˾þô߽ڹ| ѴƬ߹ۿվ| ҹվ߹ۿۿ | ¸Ļ| avĻɫ|