﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-勤加练习，必能得心应手！不期速成，日拱一卒 ！-随笔分类-Hibernate/ibatis</title><link>http://www.blogjava.net/ldwblog/category/41076.html</link><description>态度决定一切</description><language>zh-cn</language><lastBuildDate>Tue, 07 Jan 2020 10:49:39 GMT</lastBuildDate><pubDate>Tue, 07 Jan 2020 10:49:39 GMT</pubDate><ttl>60</ttl><item><title>个人公众号「Java爱好者社区」高质量原创文章持续输出，欢迎各位小主关注</title><link>http://www.blogjava.net/ldwblog/archive/2019/10/30/434887.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Wed, 30 Oct 2019 06:10:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2019/10/30/434887.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/434887.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2019/10/30/434887.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/434887.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/434887.html</trackback:ping><description><![CDATA[blogjava网站与博客园合并了，对blogjava还是有感情的。<br />并且blogjava网站发布的文章是在博客园首页看不到的。<br />blogjava网站首页能看到，你可以点击标题进入可以看到图片二维码信息。<br /><br /><strong style="color: red; font-size: 14pt;">Java爱好者社区</strong><br />公众号内容简介：<br /><p><span style="background-color: yellow; color: red;">专注于分享Java后端相关技术、老司机实战干货，不限于JVM、并发、设计模式、性能优化、分布式&amp;微服务、云原生、大数据相关主题。</span><br style="color: red;" /><span style="background-color: yellow; color: red;">希望关注的你停下脚步，定有所收获。</span><br style="color: red;" /><br />以前的个人博客内容不好迁移，所以我打算根据自己的多年经验，不断整理输出有价值的内容。<br />目前公众号内容有关于<span style="background-color: yellow; color: red;">SpringCloud（微服务框架）、Skywalking（APM监控调用链）、JVM（GC分析、内存泄漏分析）、并发编程</span>相关原创实战文章已出炉。<br /><br />最近刚开始已经有不少小伙伴关注了，期待能有幸搜索到本博客的同学，可以扫码关注一下，不胜感激。<br />大家有任何技术、职场、面试上的问题都可以与我交流。<br /><br /><span style="background-color: yellow;"><strong>方式一：</strong></span><span style="color: red; background-color: yellow;"><strong>扫码以下公众号二维码：</strong></span><br /><img src="http://www.blogjava.net/images/blogjava_net/ldwblog/Java%E7%88%B1%E5%A5%BD%E8%80%85%E7%A4%BE%E5%8C%BA%E4%BA%8C%E7%BB%B4%E7%A0%81.png" border="0" alt="" /><br /><br />方式二：<span style="color: red;">在微信上直接搜索：&nbsp;</span><span style="color: red; background-color: yellow;">javatech_cbo</span><br /><br />感谢各位小伙伴的支持，后续会在该公众号上输出大量的有价值的实战干货 ，期待与你一同进步与成长。<br /></p><img src ="http://www.blogjava.net/ldwblog/aggbug/434887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2019-10-30 14:10 <a href="http://www.blogjava.net/ldwblog/archive/2019/10/30/434887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的HQL多表联合查询使用left join方式</title><link>http://www.blogjava.net/ldwblog/archive/2013/09/12/403983.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 12 Sep 2013 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2013/09/12/403983.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/403983.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2013/09/12/403983.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/403983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/403983.html</trackback:ping><description><![CDATA[Hibernate不支持left join带on的条件查询。<br />解决办法：使用原生SQL或者使用HQL方式需要修改hbm文件(如果项目中大部分不适用级联配置情况下)<br />需求是查询网络信息，网络信息中关联了分区、网络IP(1个网络－－Ｎ个网络ＩＰ)，网桥信息.<br />HQL：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;void&nbsp;queryVnets(Page&nbsp;page)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;hql&nbsp;<span style="color: #808080; ">=</span>&nbsp;new&nbsp;StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("<span style="color: #0000FF; ">select</span>&nbsp;new&nbsp;Map(vn.id&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;id,&nbsp;vn.vnName&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnName,&nbsp;b.name&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnType,&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("vn.vnIptype&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnIptype,&nbsp;vn.vnIp&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnIp,vn.vnNat&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnNat,&nbsp;vn.vnFlag&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnFlag,&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("vn.vnetFlag&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnetFlag,&nbsp;(<span style="color: #FF00FF; ">case</span>&nbsp;<span style="color: #0000FF; ">when</span>&nbsp;<span style="color: #FF00FF; ">sum</span>(vmvn.state)<span style="color: #808080; ">=</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">0</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #0000FF; ">then</span>&nbsp;<span style="color: #800000; font-weight: bold; ">0</span>&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #800000; font-weight: bold; ">1</span>&nbsp;<span style="color: #0000FF; ">end</span>)&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;vnState,&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("vn.useType&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;useType,&nbsp;vn.createTime&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;createTime,&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql&nbsp;.append("zone.oneName&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;oneName,&nbsp;zone.oneHypervisor&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;oneHypervisor,&nbsp;zone.oneSeq&nbsp;<span style="color: #0000FF; ">as</span>&nbsp;oneSeq)&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("<span style="color: #0000FF; ">from</span>&nbsp;VnetTable&nbsp;vn, ZoneTable&nbsp;zone,&nbsp;BridgeTable&nbsp;b&nbsp;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("<span style="color: #FF00FF; ">left</span>&nbsp;<span style="color: #0000FF; ">join</span>&nbsp;<span style="color: #0000FF; ">fetch</span>&nbsp;<strong>vn.VnTables</strong>&nbsp;vmvn&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;zone.id&nbsp;<span style="color: #808080; ">=</span>&nbsp;vn.zoneId&nbsp;<span style="color: #808080; ">and</span>&nbsp;vn.vnType&nbsp;<span style="color: #808080; ">=</span>&nbsp;b.id&nbsp;");<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; ... ...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("&nbsp;<span style="color: #0000FF; ">group</span>&nbsp;<span style="color: #0000FF; ">by</span>&nbsp;vn.id");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(vnState&nbsp;<span style="color: #808080; ">!=</span>&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;<span style="color: #808080; ">&amp;&amp;</span>&nbsp;!"".equals(vnState))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;("<span style="color: #800000; font-weight: bold; ">0</span>".equals(vnState))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("&nbsp;<span style="color: #0000FF; ">having</span>&nbsp;<span style="color: #FF00FF; ">sum</span>(vmvn.state)<span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">0</span>");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;("<span style="color: #800000; font-weight: bold; ">1</span>".equals(vnState))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hql.append("&nbsp;<span style="color: #0000FF; ">having</span>&nbsp;<span style="color: #FF00FF; ">sum</span>(vmvn.state)<span style="color: #808080; ">!=</span><span style="color: #800000; font-weight: bold; ">0</span>");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />hbm配置文件：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&lt;?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"?&gt;<br />&lt;!DOCTYPE&nbsp;hibernate-mapping&nbsp;PUBLIC&nbsp;"-//Hibernate/Hibernate&nbsp;Mapping&nbsp;DTD&nbsp;3.0//EN"<br />"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />&lt;!--&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Mapping&nbsp;file&nbsp;autogenerated&nbsp;by&nbsp;MyEclipse&nbsp;Persistence&nbsp;Tools<br />--&gt;<br />&lt;hibernate-mapping&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;name="com.base.mapping.VnetTable"&nbsp;table="vnet_table"&nbsp;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&nbsp;name="id"&nbsp;type="java.lang.String"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name="ID"&nbsp;length="32"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;<span style="color: #0000FF; ">class</span>="uuid.hex"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="vnId"&nbsp;type="java.lang.Long"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name="VN_ID"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;comment&gt;创建虚拟网络时得到的ID&lt;/comment&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/column&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="zoneId"&nbsp;type="java.lang.String"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name="ZONE_ID"&nbsp;length="32"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;comment&gt;分区ID&lt;/comment&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/column&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="vlanId"&nbsp;type="java.lang.Integer"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;column&nbsp;name="VLAN_ID"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;comment&gt;VLAN_ID&lt;/comment&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/column&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br /><span style="font-size: 13px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-size: 13px;">&lt;</span><span style="font-size: 13px;">set&nbsp;name</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">vnTables</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&nbsp;lazy</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">false</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&nbsp;order</span><span style="font-size: 13px;">-</span><span style="font-size: 13px;">by</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">id&nbsp;asc</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&nbsp;inverse</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">false</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&nbsp;fetch</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">join</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&nbsp;cascade</span><span style="font-size: 13px;">=</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">all</span><span style="font-size: 13px;">"</span><span style="font-size: 13px;">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="VN_NID"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;one-to-many&nbsp;<span style="color: #0000FF; ">class</span>="com.base.mapping.VnTable"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/set&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/<span style="color: #0000FF; ">class</span>&gt;<br />&lt;/hibernate-mapping&gt;</div><br />理解inverse和cascade，可以参考：http://blog.csdn.net/wkcgy/article/details/6271321<br /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff; color: #ff0000;"><strong>总结：&nbsp;</strong></span><br style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;" /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;">&lt;one-to-many&gt;中，建议inverse=&#8221;true&#8221;，由&#8220;many&#8221;方来进行关联关系的维护&nbsp;</span><br style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;" /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;">&lt;many-to-many&gt;中，只设置其中一方inverse=&#8221;false&#8221;，或双方都不设置&nbsp;</span><br style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;" /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;">Cascade，通常情况下都不会使用。特别是删除，一定要慎重。</span><br style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;" /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff; color: #ff0000;"><strong>操作建议</strong>&nbsp;<br /></span><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;">&nbsp;&nbsp;一般对many-to-one和many-to-many不设置级联，这要看业务逻辑的需要;对one-to-one和one-to-many设置级联。</span><br style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;" /><span style="font-family: Arial; font-size: 14.44444465637207px; line-height: 25.98958396911621px; background-color: #ffffff;">&nbsp;&nbsp;many-to-many关联关系中，一端设置inverse=&#8221;false&#8221;，另一端设置为inverse=&#8221;true&#8221;。在one-to-many关联关系中，设置inverse=&#8221;true&#8221;,由多端来维护关系表</span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/ldwblog/aggbug/403983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2013-09-12 11:57 <a href="http://www.blogjava.net/ldwblog/archive/2013/09/12/403983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mybatis3.2.1整合Spring3.1</title><link>http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Wed, 10 Jul 2013 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/401418.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/401418.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/401418.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 根据官方的说法，在ibatis3，也就是Mybatis3问世之前，Spring3的开发工作就已经完成了，所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求。下面就将通过Mybatis-Spring来整合Mybatis跟Spring的用法做一个简单的介绍。MapperFactoryB...&nbsp;&nbsp;<a href='http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html'>阅读全文</a><img src ="http://www.blogjava.net/ldwblog/aggbug/401418.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2013-07-10 18:07 <a href="http://www.blogjava.net/ldwblog/archive/2013/07/10/401418.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 的悲观锁说明，自己复习之用，转自http://blog.sina.com.cn/s/blog_49cc672f0100ar8h.html</title><link>http://www.blogjava.net/ldwblog/archive/2011/03/17/346473.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 17 Mar 2011 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2011/03/17/346473.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/346473.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2011/03/17/346473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/346473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/346473.html</trackback:ping><description><![CDATA[<div class="articalContent  " id="sina_keyword_ad_area2">
<p>软件系统的并发控制一般是通过加锁（有乐观锁和悲观锁两种）来实现，乐观锁是一种事后补救措施，是通过程序的逻辑控制版本来实现的，而悲观锁是事前的一种预防措施，它利用数据库的锁机制来实现。</p>
<p>虽然乐观锁能够提高系统的性能，但它是对发生冲突的访问进行事后的补救，应用在用户输入数据量很少的场合比较适合，但如果在企业<a class="infotextkey" href="http://www.itfensi.com/administer/ERP" target="_blank"><font color="#0e37a9">ERP</font></a>，用户与系统交互涉及大量数据在页面表单上录入，如果事后提交失败后才提示用户要重新录入是很不现实的，所以有必要进行事前控制，这就要采用悲观锁。<br />
<br />
在多个客户端可能读取同一笔数据或同时更新一笔数据的情况下，防止同一个数据被修改而造成混乱，最简单的手段就是在读取时对数据进行锁定，其它客户端不能对同一笔数据进行更新的读取动作。</p>
<p>一个典型的倚赖数据库的悲观锁调用：<br />
select * from account where name=&#8221;John&#8221; for update</p>
<p>这条 sql 语句锁定了 account 表中所有符合检索条件（name=&#8221;Erica&#8221;）的记录。本次事务提交之前（事务提交时会释放事务过程中的锁），外界无法修改这些记录。Hibernate 的悲观锁，也是基于数据库的锁机制实现。<br />
下面的代码实现了对查询记录的加锁：<br />
<font color="#33cc00"><font face="Arial, Helvetica, sans-serif"><font style="background-color: #ffffff"><font color="#3333ff"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">String hqlStr ="from TUser as user where user.name='John'";<br />
Query query = session.createQuery(hqlStr);<br />
query.setLockMode("user",LockMode.UPGRADE); // 加锁<br />
List userList = query.list();// 执行查询，获取数据</font></font></font><br />
</font></font>query.setLockMode 对查询语句中，特定别名所对应的记录进行加锁（我们为TUser 类指定了一个别名 &#8220;user&#8221; ），这里也就是对返回的所有 user 记录进行加锁。<br />
观察运行期 Hibernate 生成的 SQL 语句：<br />
<font face="Verdana, Arial, Helvetica, sans-serif" color="#3333ff" size="2"><font face="Verdana, Arial, Helvetica, sans-serif" color="#3333ff" size="2"></font>select tuser0_.id as id, tuser0_.name as name, tuser0_.group_id<br />
as group_id, tuser0_.user_type as user_type, tuser0_.sex as sex<br />
from t_user tuser0_ where (tuser0_.name='John' ) for update</font><br />
这里 Hibernate 通过使用数据库的 for update 子句实现了悲观锁机制。<br />
Hibernate 的加锁模式有：<br />
<strong>LockMode.NONE ：</strong> 无锁机制。<br />
<strong>LockMode.WRITE ：</strong> Hibernate 在 Insert 和 Update 记录的时候会自动获取。<br />
<strong>LockMode.READ ：</strong> Hibernate 在读取记录的时候会自动获取。<br />
以上这三种锁机制一般由 Hibernate 内部使用，如 Hibernate 为了保证 Update过程中对象不会被外界修改，会在 save 方法实现中自动为目标对象加上 WRITE 锁。<br />
<strong>LockMode.UPGRADE ：</strong>利用数据库的 for update 子句加锁。<br />
<strong>LockMode. UPGRADE_NOWAIT ：</strong> Oracle 的特定实现，利用 Oracle 的 for update nowait 子句实现加锁。<br />
上面这两种锁机制是我们在应用层较为常用的，加锁一般通过以下方法实现：<br />
<strong>Criteria.setLockMode<br />
Query.setLockMode<br />
Session.lock</strong><br />
注意，只有在查询开始之前（也就是 Hiberate 生成 SQL 之前）设定加锁，才会真正通过数据库的锁机制进行加锁处理，否则，数据已经通过不包含 for update 子句的 Select SQL 加载进来，所谓数据库加锁也就无从谈起。<br />
</p>
</div>
<img src ="http://www.blogjava.net/ldwblog/aggbug/346473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2011-03-17 16:03 <a href="http://www.blogjava.net/ldwblog/archive/2011/03/17/346473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Hibernate中，对象有三种状态</title><link>http://www.blogjava.net/ldwblog/archive/2010/08/16/328954.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Mon, 16 Aug 2010 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2010/08/16/328954.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/328954.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2010/08/16/328954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/328954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/328954.html</trackback:ping><description><![CDATA[在Hibernate中，对象有三种状态：临时状态、持久状态和游离状态。
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><font color="#ff0000"><strong>&nbsp;<wbr>临时状态</strong></font>：当new一个实体对象后，这个对象处于临时状态，即这个对象只是一个保存临时数据的内存区域，如果没有变量引用这个对象，则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系，除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联，并把数据插入或者更新到数据库，这个对象才转换为持久对象。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>例如：Emp e=new Emp();&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //创建临时对象&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> e.setEmpno((long) 8888);&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.setEName("mike");&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>...&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>EmpDAO d=new EmpDAO();&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>d.save(e);//持久化&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>...</p>
<p><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> <font color="#ff0000"><strong>持久状态</strong></font>: 持久化对象的实例在数据库中有对应的记录，并拥有一个持久化表示（ID）。对持久化对象进行delete操作后，数据库中对应的记录将被删除，那么持久化对象与数据库记录不再存在对应关系，持久化对象变成临时状态。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>持久化对象被修改变更后，不会马上同步到数据库，直到数据库事务提交。在同步之前，持久化对象是脏的（Dirty）。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 例如：&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Emp e=new Emp(); //创建了临时的对象&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>EmpDAO edao= new empDAO();&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e=edao.findbyEmpno((long) 7786);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //使对象与数据库记录对应，从而持久化&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.setEname("新的名字");&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //修改了持久化对象，使之处于 Dirty&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>......&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>edao.saveorupdate(e);&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //保存，但是仍然 Dirty&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>tran.commit();&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> //提交，实现与数据库同步，不再Dirty&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>......</p>
<p>&nbsp;<wbr></p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr><font color="#ff0000"><strong>&nbsp;<wbr>游离状态</strong></font>：当Session进行了Close、Clear或者evict后，持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值，但是因为会话已经消失，对象不在持久化管理之内，所以处于游离状态（也叫：脱管状态）。游离状态的对象与临时状态对象是十分相似的，只是它还含有持久化标识。</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>其中，持久化状态的对象，简称为：PO&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>而临时状态和游离状态的对象，简称为：VO</p>
<p><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>1、通过get()或load()方法得到的实例都是持久化状态的。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>2、当把session关闭时，session缓存中的持久化对象也变成游离态</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 因关闭session而变成游离态的可以通过lock、save、update变成持久态&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 3、持久态实例可以通过调用delete()变成游离态&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>而游离状态的实例可以通过调用lock()或者replicate()进行持久化&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>4、save()和persist()将会引发SQL的insert，delete()会引发SQL的delete&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>update()或merge()会引发SQL的update，对持久化实例的修改在刷新提交的时候会</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>被检测到, 它会引发SQL的update&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>saveOrUpdate()或者replicate ()会引发SQL的insert或者update</p>
<img src ="http://www.blogjava.net/ldwblog/aggbug/328954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2010-08-16 09:59 <a href="http://www.blogjava.net/ldwblog/archive/2010/08/16/328954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库表中定义数据类型与Hibernate中获取值方式</title><link>http://www.blogjava.net/ldwblog/archive/2009/08/31/293332.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Mon, 31 Aug 2009 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2009/08/31/293332.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/293332.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2009/08/31/293332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/293332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/293332.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: province_code-----Char(2)&nbsp;--》Charactercert-----Clob 类型&nbsp;---》SerializableClobcertstate------Number类型&nbsp;--》BigDecimal&nbsp;&nbsp;&nbsp; usercode------Varchar2类型 ---》Stringaddtime ---...&nbsp;&nbsp;<a href='http://www.blogjava.net/ldwblog/archive/2009/08/31/293332.html'>阅读全文</a><img src ="http://www.blogjava.net/ldwblog/aggbug/293332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2009-08-31 16:26 <a href="http://www.blogjava.net/ldwblog/archive/2009/08/31/293332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HibernateDAO实现类 查询List方法</title><link>http://www.blogjava.net/ldwblog/archive/2009/08/20/291937.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 20 Aug 2009 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2009/08/20/291937.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/291937.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2009/08/20/291937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/291937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/291937.html</trackback:ping><description><![CDATA[<span style="color: #008080">&nbsp;public List&lt;CertInfoListView&gt; getInfoList(CertInfoListView view) throws DAOException {<br />
&nbsp;&nbsp;List&lt;CertInfoListView&gt;&nbsp; liinfo = new ArrayList&lt;CertInfoListView&gt;();<br />
&nbsp;&nbsp;String sql="select b.usercode,b.agentcode,i.sn,i.cert,i.certstate,i.endtime, i.ipasskeyno,b.id,b.addtime&nbsp; from certbind b inner join certinfo i on b.ipasskeyno=i.ipasskeyno";<br />
&nbsp;&nbsp;Session session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;StringBuffer sb = new StringBuffer(sql);<br />
&nbsp;&nbsp;sb.append(" where 1=1 ");<br />
&nbsp;&nbsp;if(!CheckEmpty.isEmpty(view.getIpasskeyno())){<br />
&nbsp;&nbsp;&nbsp;sb.append(" and i.ipasskeyno ='").append(view.getIpasskeyno()).append("'");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(!CheckEmpty.isEmpty(view.getAgentcode())){<br />
&nbsp;&nbsp;&nbsp;sb.append(" and b.agentcode ='").append(view.getAgentcode()).append("'");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(!CheckEmpty.isEmpty(view.getSn())){<br />
&nbsp;&nbsp;&nbsp;sb.append(" and i.sn ='").append(view.getSn()).append("'");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(!CheckEmpty.isEmpty(view.getUsercode())){<br />
&nbsp;&nbsp;&nbsp;sb.append(" and b.usercode ='").append(view.getUsercode()).append("'");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(view.getAddtime()!=null){<br />
&nbsp;&nbsp;&nbsp;sb.append(" and b.addtime=").append(view.getAddtime());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;sb.append(" order by ipasskeyno ,addtime desc");<br />
&nbsp;&nbsp;Query q = session.createSQLQuery(sb.toString());<br />
&nbsp;&nbsp;int pageno = view.getPageno();<br />
&nbsp;&nbsp;int size = view.getPagesize();<br />
&nbsp;&nbsp;if(pageno!=0&amp;&amp;size!=0){<br />
&nbsp;&nbsp;&nbsp;q.setFirstResult((pageno-1)*size);<br />
&nbsp;&nbsp;&nbsp;q.setMaxResults(size);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;List list = q.list();<br />
&nbsp;&nbsp;Iterator it = list.iterator();<br />
&nbsp;&nbsp;while(it.hasNext()){<br />
&nbsp;&nbsp;&nbsp;Object[] obj = (Object[])it.next();<br />
&nbsp;&nbsp;&nbsp;CertInfoListView c = new CertInfoListView();<br />
&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;obj.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!CheckEmpty.isEmpty((String)obj[0])){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setUsercode((String)obj[0]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!CheckEmpty.isEmpty((String)obj[1])){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setAgentcode((String)obj[1]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!CheckEmpty.isEmpty((String)obj[2])){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setSn((String)obj[2]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(obj[3]!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SerializableClob sc = (SerializableClob)obj[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String cc = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sc!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc = sc.getSubString(1, (int)sc.length());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (SQLException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc!=null)c.setCert(cc);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(obj[4]!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal b = (BigDecimal)obj[4];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setCertstate(b.intValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if((obj[5])!=null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setEndtime(((Date)obj[5]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!CheckEmpty.isEmpty((String)obj[6])){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.setIpasskeyno((String)obj[6]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setCertbindid(Integer.parseInt((String)obj[7]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setAddtime((Date)obj[8]);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;liinfo.add(c);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(session!=null&amp;&amp;session.isConnected())session.close();<br />
&nbsp;&nbsp;return liinfo;<br />
&nbsp;} <br />
<br />
<br />
实现分页的DAO<br />
/*<br />
&nbsp; * (non-Javadoc)<br />
&nbsp; * <br />
&nbsp; * @see com.cns.certservice.dao.CertBindTabDao#getCertBindList(com.cns.certservice.vo.CertBindView)<br />
&nbsp; */<br />
&nbsp;public List&lt;CertBindView&gt; getCertBindList(CertBindView view)<br />
&nbsp;&nbsp;&nbsp;throws DAOException {<br />
&nbsp;&nbsp;List&lt;CertBindView&gt; li = null;<br />
&nbsp;&nbsp;List&lt;Certbind&gt; lic = null;<br />
&nbsp;&nbsp;Session session = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;Criteria cri = session.createCriteria(Certbind.class);<br />
&nbsp;&nbsp;&nbsp;Certbind c = getCertBind(view);<br />
&nbsp;&nbsp;&nbsp;if (c.getAddtime() != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("addtime", c.getAddtime()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getAgentcode())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("agentcode", c.getAgentcode()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if(c.getId()!=0)cri.add(Expression.eq("id", c.getId()));<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getIpasskeyno())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("ipasskeyno", c.getIpasskeyno()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getUsercode())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("usercode", c.getUsercode()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getExtend1())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("extend1", c.getExtend1()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getExtend2())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("extend2", c.getExtend2()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (c.getAgenttype() != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("agenttype", c.getAgenttype()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;int pageno = view.getPageno();<br />
&nbsp;&nbsp;&nbsp;int size = view.getPagesize();<br />
&nbsp;&nbsp;&nbsp;if(pageno!=0&amp;&amp;size!=0){<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.setFirstResult((pageno-1)*size);<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.setMaxResults(size);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;lic = cri.list();<br />
&nbsp;&nbsp;&nbsp;if (lic != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;li = new ArrayList&lt;CertBindView&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (Certbind cer : lic) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CertBindView v = getCertBindView(cer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;li.add(v);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;} catch (HibernateException e) {<br />
&nbsp;&nbsp;&nbsp;log.error(e,e);<br />
&nbsp;&nbsp;&nbsp;throw new DAOException(e);<br />
&nbsp;&nbsp;}finally{<br />
&nbsp;&nbsp;&nbsp;if (session != null &amp;&amp; session.isConnected())<br />
&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return li;<br />
&nbsp;}<br />
&nbsp;public int getInfoListCount(CertBindView view) throws DAOException {<br />
&nbsp;&nbsp;int count = 0;<br />
&nbsp;&nbsp;Session session = null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;Criteria cri = session.createCriteria(Certbind.class);<br />
&nbsp;&nbsp;&nbsp;Certbind c = getCertBind(view);<br />
&nbsp;&nbsp;&nbsp;if (c.getAddtime() != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("addtime", c.getAddtime()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getAgentcode())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("agentcode", c.getAgentcode()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if(c.getId()!=0)cri.add(Expression.eq("id", c.getId()));<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getIpasskeyno())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("ipasskeyno", c.getIpasskeyno()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getUsercode())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("usercode", c.getUsercode()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getExtend1())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("extend1", c.getExtend1()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(c.getExtend2())) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("extend2", c.getExtend2()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (c.getAgenttype() != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;cri.add(Expression.eq("agenttype", c.getAgenttype()));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;count = (Integer)cri.setProjection(Projections.rowCount()).uniqueResult();<br />
&nbsp;&nbsp;&nbsp;cri.setProjection(null);<br />
&nbsp;&nbsp;} catch (HibernateException e) {<br />
&nbsp;&nbsp;&nbsp;log.error(e,e);<br />
&nbsp;&nbsp;&nbsp;throw new DAOException(e);<br />
&nbsp;&nbsp;}finally{<br />
&nbsp;&nbsp;&nbsp;if (session != null &amp;&amp; session.isConnected())<br />
&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return count;<br />
&nbsp;}<br />
<br />
<p>/*<br />
&nbsp; * (non-Javadoc)<br />
&nbsp; * <br />
&nbsp; * @see com.cns.certservice.dao.CertBindTabDao#updateCertBind(com.cns.certservice.vo.CertBindView)<br />
&nbsp; */<br />
&nbsp;public boolean updateCertBind(CertBindView view) throws DAOException {<br />
&nbsp;&nbsp;boolean res = false;<br />
&nbsp;&nbsp;if (view.getId()==0) {<br />
&nbsp;&nbsp;&nbsp;throw new DAOException("getId from CertBindView is null!");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;Session session= null;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;Certbind c = (Certbind) session.get(Certbind.class, view.getId());<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getAgentcode()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setAgentcode(view.getAgentcode());<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend1()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setExtend1(view.getExtend1());<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend2()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setExtend2(view.getExtend2());<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getIpasskeyno()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setIpasskeyno(view.getIpasskeyno());<br />
&nbsp;&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getUsercode()))<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setUsercode(view.getUsercode());<br />
&nbsp;&nbsp;&nbsp;if (view.getAgenttype() != 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;c.setAgenttype(view.getAgenttype());<br />
&nbsp;&nbsp;&nbsp;res = HibernateTemplate.getInstance().updateObject(c);<br />
&nbsp;&nbsp;} catch (HibernateException e) {<br />
&nbsp;&nbsp;&nbsp;log.error(e,e);<br />
&nbsp;&nbsp;&nbsp;throw new DAOException(e);<br />
&nbsp;&nbsp;}finally{<br />
&nbsp;&nbsp;&nbsp;if (session != null &amp;&amp; session.isConnected())<br />
&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return res;<br />
&nbsp;}</p>
<p><br />
&nbsp;private Certbind getCertBind(CertBindView view) {<br />
&nbsp;&nbsp;Certbind c = new Certbind();<br />
&nbsp;&nbsp;if (view.getAddtime() != null)<br />
&nbsp;&nbsp;&nbsp;c.setAddtime(view.getAddtime());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getAgentcode()))<br />
&nbsp;&nbsp;&nbsp;c.setAgentcode(view.getAgentcode());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend1()))<br />
&nbsp;&nbsp;&nbsp;c.setExtend1(view.getExtend1());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend2()))<br />
&nbsp;&nbsp;&nbsp;c.setExtend2(view.getExtend2());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getIpasskeyno()))<br />
&nbsp;&nbsp;&nbsp;c.setIpasskeyno(view.getIpasskeyno());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getUsercode()))<br />
&nbsp;&nbsp;&nbsp;c.setUsercode(view.getUsercode());<br />
&nbsp;&nbsp;if(view.getId()!=0)c.setId(view.getId());<br />
&nbsp;&nbsp;if (view.getAgenttype() != 0)<br />
&nbsp;&nbsp;&nbsp;c.setAgenttype(view.getAgenttype());<br />
&nbsp;&nbsp;return c;<br />
&nbsp;}</p>
<p>&nbsp;private CertBindView getCertBindView(Certbind view) {<br />
&nbsp;&nbsp;CertBindView c = new CertBindView();<br />
&nbsp;&nbsp;if (view.getAddtime() != null)<br />
&nbsp;&nbsp;&nbsp;c.setAddtime(view.getAddtime());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getAgentcode()))<br />
&nbsp;&nbsp;&nbsp;c.setAgentcode(view.getAgentcode());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend1()))<br />
&nbsp;&nbsp;&nbsp;c.setExtend1(view.getExtend1());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getExtend2()))<br />
&nbsp;&nbsp;&nbsp;c.setExtend2(view.getExtend2());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getIpasskeyno()))<br />
&nbsp;&nbsp;&nbsp;c.setIpasskeyno(view.getIpasskeyno());<br />
&nbsp;&nbsp;if (!CheckEmpty.isEmpty(view.getUsercode()))<br />
&nbsp;&nbsp;&nbsp;c.setUsercode(view.getUsercode());<br />
&nbsp;&nbsp;if(view.getId()!=0)c.setId(view.getId());<br />
&nbsp;&nbsp;if (view.getAgenttype() != 0)<br />
&nbsp;&nbsp;&nbsp;c.setAgenttype(view.getAgenttype());<br />
&nbsp;&nbsp;return c;<br />
&nbsp;}</p>
</span>
<img src ="http://www.blogjava.net/ldwblog/aggbug/291937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2009-08-20 13:37 <a href="http://www.blogjava.net/ldwblog/archive/2009/08/20/291937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HibernateTemplate增改删查方法</title><link>http://www.blogjava.net/ldwblog/archive/2009/08/20/291932.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Thu, 20 Aug 2009 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2009/08/20/291932.html</guid><wfw:comment>http://www.blogjava.net/ldwblog/comments/291932.html</wfw:comment><comments>http://www.blogjava.net/ldwblog/archive/2009/08/20/291932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ldwblog/comments/commentRss/291932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ldwblog/services/trackbacks/291932.html</trackback:ping><description><![CDATA[<p>package com.cns.certservice.dao.impl;</p>
<p>import org.apache.log4j.Logger;<br />
import org.hibernate.HibernateException;<br />
import org.hibernate.Session;<br />
import org.hibernate.cfg.Configuration;<br />
import org.hibernate.SessionFactory;<br />
import org.hibernate.Transaction;</p>
<p>import com.cns.certservice.exception.DAOException;</p>
<p><br />
public class HibernateTemplate {</p>
<p>&nbsp;&nbsp;&nbsp; private HibernateTemplate() {</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * static final session factory<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private static SessionFactory sessionFactory = null;</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * local thread variable used for storing share session instance<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private static final ThreadLocal localSession = new ThreadLocal();</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * log4j logger<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private static final Logger logger = Logger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getLogger(HibernateTemplate.class);<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * use JTA transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 该工具唯一实例。<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private static HibernateTemplate instance = null;<br />
&nbsp;&nbsp;&nbsp; private static Transaction tx = null;<br />
&nbsp;&nbsp;&nbsp; private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";<br />
&nbsp;&nbsp;&nbsp; private static final Configuration cfg = new Configuration();<br />
&nbsp;&nbsp;&nbsp; /** Holds a single instance of Session */<br />
&nbsp;&nbsp;&nbsp; private static final ThreadLocal threadLocal = new ThreadLocal();</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 获取持久工具的唯一实例，以后不是使用单实例模式，而不是采用对象池支持。<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return　PersistentTool<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws BaseException<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public synchronized static HibernateTemplate getInstance() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (instance == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance = new HibernateTemplate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instance.initHibernate();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return instance;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 实现Hibernate的初始化配置环境。<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public void initHibernate() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处从系统路径中获取配置文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cfg.configure(CONFIG_FILE_LOCATION);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 装载配置，构造SessionFactory对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory = cfg.buildSessionFactory();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Get the share session<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return Session share session<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; Session getSession() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into getSession method of DaoUtil");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obtain share session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = (Session) localSession.get();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (session == null||!session.isOpen()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //get session by session factory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session = sessionFactory.openSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localSession.set(session);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return session;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Close share session<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; void close() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into closeSessionl");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obtain share session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = (Session) localSession.get();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localSession.set(null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (session != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Begin JTA transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; void beginTransaction() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into beginTransaction");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = (Session) localSession.get();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx = session.beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Commit transaction<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; void commitTransaction() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx.commit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Rollback transaction when breaching ACID operation<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; void rollbackTransaction() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tx.rollback();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Insert a record into table<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param obj Object<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws DAOException <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; int insertObject(Object obj) throws DAOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;int res = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into insertObject");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obtain current share session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object robj = session.save(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (robj instanceof Integer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;res = (Integer) robj;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (robj instanceof String) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;res =1;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollbackTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("insertObject error:", ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new DAOException(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commitTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return res;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p><br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Delete a record of database table by Hibernate po object<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param obj Object<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws DAOException <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; boolean deleteObject(Object obj) throws DAOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;boolean res = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into deleteObject method");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obtain current share session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.delete(obj);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollbackTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("deleteObject error:", ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new DAOException(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commitTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return res;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p style="color: #003366"><br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * Update a record of database table<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @param ob Object<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @throws DAOException <br />
&nbsp;&nbsp;&nbsp;&nbsp; * @ <br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public&nbsp; boolean updateObject(Object ob) throws DAOException {<br />
&nbsp;&nbsp;&nbsp; &nbsp;boolean res = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("Now enter into updateObject");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //obtain current share session<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session = HibernateTemplate.getInstance().getSession();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.update(ob);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res= true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (HibernateException ex) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;rollbackTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; logger.error("updateObject error:", ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; throw new DAOException(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commitTransaction();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return res;<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<img src ="http://www.blogjava.net/ldwblog/aggbug/291932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2009-08-20 13:22 <a href="http://www.blogjava.net/ldwblog/archive/2009/08/20/291932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1+hibernate分页例子</title><link>http://www.blogjava.net/ldwblog/archive/2009/08/17/291502.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Mon, 17 Aug 2009 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2009/08/17/291502.html</guid><description><![CDATA[http://www.blogjava.net/wujun/archive/2009/05/18/65890.html<img src ="http://www.blogjava.net/ldwblog/aggbug/291502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2009-08-17 15:15 <a href="http://www.blogjava.net/ldwblog/archive/2009/08/17/291502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate创建数据库表（一对一and一对多） </title><link>http://www.blogjava.net/ldwblog/archive/2008/12/15/246428.html</link><dc:creator>David1228</dc:creator><author>David1228</author><pubDate>Mon, 15 Dec 2008 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/ldwblog/archive/2008/12/15/246428.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/ldwblog/archive/2008/12/15/246428.html'>阅读全文</a><img src ="http://www.blogjava.net/ldwblog/aggbug/246428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ldwblog/" target="_blank">David1228</a> 2008-12-15 15:44 <a href="http://www.blogjava.net/ldwblog/archive/2008/12/15/246428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>