﻿<?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-&lt;h1&gt;&lt;font color="red" size="36"&gt;︻┳═一Java&lt;/font&gt;&lt;/h1&gt;-文章分类-Hibernate</title><link>http://www.blogjava.net/rain1102/category/14840.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="maroon"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 28 Mar 2008 20:57:29 GMT</lastBuildDate><pubDate>Fri, 28 Mar 2008 20:57:29 GMT</pubDate><ttl>60</ttl><item><title>Hibernate3执行SQL语句</title><link>http://www.blogjava.net/rain1102/articles/189371.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 28 Mar 2008 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/189371.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/189371.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/189371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/189371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/189371.html</trackback:ping><description><![CDATA[当想通过hibernate进行批量增加记录的时候，或者到数据的时候会用到SQL语句。处理如下：<br />
public Integer batchSave(final String sql){<br />
&nbsp;&nbsp;Session session = this.getSession();<br />
&nbsp;&nbsp;Transaction tx = session.beginTransaction();<br />
&nbsp;&nbsp;Integer result = -1;<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;<span style="color: #008000">&nbsp;tx.begin();<br />
</span>&nbsp;&nbsp;&nbsp;result = <span style="color: #008000">session.createSQLQuery(sql).executeUpdate();<br />
</span>&nbsp;&nbsp;&nbsp;<span style="color: #008000">session.flush();<br />
&nbsp;&nbsp;&nbsp;tx.commit();<br />
</span>&nbsp;&nbsp;} catch (DataAccessException e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;if (tx != null) {<br />
&nbsp;&nbsp;&nbsp;<span style="color: #008000">&nbsp;tx.rollback();<br />
</span>&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;} finally {<br />
&nbsp;&nbsp;<span style="color: #008000">&nbsp;session.close();<br />
</span>&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return result;<br />
&nbsp;}<img src ="http://www.blogjava.net/rain1102/aggbug/189371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-28 23:13 <a href="http://www.blogjava.net/rain1102/articles/189371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate3 错误： could not initialize proxy - no Session </title><link>http://www.blogjava.net/rain1102/articles/182707.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 28 Feb 2008 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/182707.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/182707.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/182707.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/182707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/182707.html</trackback:ping><description><![CDATA[<font size="2">异常：<br />
<font size="2"><font size="2"><font size="2">org.hibernate.LazyInitializationException: <span style="color: #800000"><span style="color: #ff0000">could not initialize proxy - no Session<br />
</span></span>at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)<br />
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111</font></font><font size="2">)<br />
<br />
<span><font face="Times New Roman" size="3"><font size="3"><strong><font size="2"><span><font face="Arial">原因：</font></span></font></strong></font></font></span><span><font face="Times New Roman" size="3"><font size="3"><font size="2"><span><font face="Arial">hibernate3 </font></span><span><font face="Times New Roman">many-to-one</font></span></font><span><font size="2">的默认选项是 </font><font face="Times New Roman"><font size="2">lazy = "proxy"</font></font></span></font></font></span><br />
<span><font face="Times New Roman" size="3"><font size="3"><span><strong>解决方法：</strong></span></font></font></span><span><font face="Times New Roman" size="3"><font size="3"><span><font face="宋体">&lt;many-to-one&gt;</font>&nbsp;&nbsp;&amp; &lt;set&gt; 中设置 </span></font></font></span><span><font face="Times New Roman" size="3"><font size="3"><span><font face="宋体">lazy="false"</font></span></font></font></span></font></font></font><img src ="http://www.blogjava.net/rain1102/aggbug/182707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-02-28 16:04 <a href="http://www.blogjava.net/rain1102/articles/182707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Hibernate Search全文检索你的领域模型</title><link>http://www.blogjava.net/rain1102/articles/180470.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 18 Feb 2008 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/180470.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/180470.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/180470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/180470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/180470.html</trackback:ping><description><![CDATA[<p>Hibernate Search项目的Beta第二版刚刚发布。InfoQ为此采访了Hibernate Search项目的发起人Emmanuel Bernard以了解更多细节，Emmanuel同时也是相关项目Hibernate Annotations和Hibernate EntityManager的发起人。根据Emmanuel所言，Hibernate Search目的是帮助Hibernate的使用者或是Java Persistence API（JPA）的使用者可以通过全文搜索索引来访问Hibernate或JPA管理的对象。Hibernate Search项目的主要特性包含以下几个方面：</p>
<p>Lucene集成——作为强大高效的检索引擎，Lucene的美名早已久经考验了； <br />
数据的自动插入和更新——当一个对象通过Hibernate添加或更新时，索引也会相应进行透明的更新； <br />
支持众多复杂的搜索方式——可快速的使用通配符进行搜索，以及多关键词全文检索（multi-word text searches）和近似或同义词搜索（approximation/synonym searches），或根据相关性排列搜索结果； <br />
搜索集群（Search Clustering）——Hibernate Search提供了内建搜索集群解决方案，其中包括一个基于JMS的异步查询和索引系统； <br />
对Lucene API接口的直接调用——如果用户打算处理某些特别复杂的问题，可以在查询中直接使用Lucene提供的API接口； <br />
对Lucene的自动管理——Hibernate Search可以管理并优化Lucene的索引，并且非常高效地使用Lucene的API接口。 <br />
项目的主要目标包含以下几个方面：</p>
<p>易用性——和Hibernate的ORM映射一样，Hibernate Search帮助用户实现了业务90%的工作，并且使用户专注于余下更为困难的业务实现部分； <br />
和已有的Hibernate/JPA编程模型保持一致性——更轻松地集成Hibernate/JPA编程模型是&#8220;一开始就致力要实现的目标&#8221;。</p><img src ="http://www.blogjava.net/rain1102/aggbug/180470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-02-18 15:16 <a href="http://www.blogjava.net/rain1102/articles/180470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Set，List和Hibernate里面的PersistentSet</title><link>http://www.blogjava.net/rain1102/articles/175733.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Jan 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175733.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175733.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175733.html</trackback:ping><description><![CDATA[最近两天突然对List和Set产生了兴趣，发觉很多地方都在讲他们的区别，包括是否可以添加重复对象以及他们的排序问题，仔细想想这个问题很有意思，我可以回答是有序的也可以说是无序的，这要看是怎么回答了，list是按照添加的先后顺序来排序的，所以可以说他是有序的，说list无序是说他内部是无序的，Set有序说的是Set是内部排序的，按照从小到大排序。说他无序说的是他不按照你输入的顺序来排序。<br />
然后看到Hibernate里面用到一对多，或者多对多时候会用到Set，然后我看自己的model，里面明明用的是HashSet，为什么他就可以按照集合里对象的字段排序呢？问了杨大哥终于知道了，原来在返回的时候返回给用户的是Hibernate的自己的类：org.hibernate.collection.PersistentSet。Oh my god!<br /><img src ="http://www.blogjava.net/rain1102/aggbug/175733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-16 17:39 <a href="http://www.blogjava.net/rain1102/articles/175733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL下使用Hibernate的Query中setMaxResults方法出现错误</title><link>http://www.blogjava.net/rain1102/articles/170767.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 26 Dec 2007 16:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/170767.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/170767.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/170767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/170767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/170767.html</trackback:ping><description><![CDATA[MySQL下使用Hibernate的Query中setMaxResults方法出现错误：<br />
System Runtime Error: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query <br />
这是因为MySQL不支持top，而是使用了limit！<br />
目前还没找到解决办法，不知道为什么Hibernate搞出这玩意，干吗不转换一下，还是bug呢！晕！ <br />
<br />
终于解决了，不是人家的错误，而是我自己弄错了。方言干错了！失败！<img src ="http://www.blogjava.net/rain1102/aggbug/170767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-27 00:47 <a href="http://www.blogjava.net/rain1102/articles/170767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>query.scroll()和query.setMaxResults();query.setFirstResult() </title><link>http://www.blogjava.net/rain1102/articles/170754.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 26 Dec 2007 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/170754.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/170754.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/170754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/170754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/170754.html</trackback:ping><description><![CDATA[<p>query.scroll()和query.setMaxResults();query.setFirstResult() <br />
这这两种方法都可以取到一定范围内的数据，用来数据分页显示。那么那种方法更好呢？</p>
<p>scroll是用JDBC2.0的可滚动结果集实现；query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。</p>
<p>在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页，例如MySQL的 limit 0,50这样的SQL语句。不但速度快，而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL，例如SQL Server就不支持。</p>
<p>scroll是利用JDBC2.0的功能做分页的，那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存，然后再分页的。如果这个结果集非常大，例如几万条，不但程序执行速度会很慢，而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现，那么就不会导致这种问题，例如jTDS。</p><img src ="http://www.blogjava.net/rain1102/aggbug/170754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-26 23:13 <a href="http://www.blogjava.net/rain1102/articles/170754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的复杂用法HibernateCallback</title><link>http://www.blogjava.net/rain1102/articles/170638.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 26 Dec 2007 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/170638.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/170638.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/170638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/170638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/170638.html</trackback:ping><description><![CDATA[<p style="text-indent: 21pt; line-height: 15.7pt">HibernateTemplate<span style="font-family: 宋体">还提供一种更加灵活的方式来操作数据库，通过这种方式可以完全使用</span>Hibernate<span style="font-family: 宋体">的操作方式。</span>HibernateTemplate<span style="font-family: 宋体">的灵活访问方式是通过如下两个方法完成：</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Object execute(HibernateCallback action)</p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>List execute(HibernateCallback action)</p>
<p style="text-indent: 21pt; line-height: 15.7pt"><span style="font-family: 宋体">这两个方法都需要一个</span>HibernateCallback<span style="font-family: 宋体">的实例，</span>HibernateCallback<span style="font-family: 宋体">实例可在任何有效的</span>Hibernate<span style="font-family: 宋体">数据访问中使用。程序开发者通过</span>HibernateCallback<span style="font-family: 宋体">，可以完全使用</span>Hibernate<span style="font-family: 宋体">灵活的方式来访问数据库，解决</span>Spring<span style="font-family: 宋体">封装</span>Hibernate<span style="font-family: 宋体">后灵活性不足的缺陷。</span>HibernateCallback<span style="font-family: 宋体">是一个接口，该接口只有一个方法</span>doInHibernate(org.hibernate.Session&nbsp;session)<span style="font-family: 宋体">，该方法只有一个参数</span>Session<span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21pt; line-height: 15.7pt"><span style="font-family: 宋体">通常，程序中采用实现</span>HibernateCallback<span style="font-family: 宋体">的匿名内部类来获取</span>HibernateCallback<span style="font-family: 宋体">的实例，方法</span>doInHibernate<span style="font-family: 宋体">的方法体就是</span>Spring<span style="font-family: 宋体">执行的持久化操作。具体代码如下：</span></p>
<p>public class PersonDaoImpl implements PersonDao</p>
<p>{<br />
&nbsp;// 私有实例变量保存SessionFactory<br />
&nbsp;private SessionFactory sessionFactory;<br />
&nbsp;// 依赖注入必须的setter方法<br />
&nbsp;public void setSessionFactory(SessionFactory sessionFactory){<br />
&nbsp;&nbsp;this.sessionFactory = sessionFactory;<br />
&nbsp;}<br />
&nbsp;/**<br />
&nbsp; * <br />
&nbsp; * 通过人名查找所有匹配该名的Person实例<br />
&nbsp; * <br />
&nbsp; * @param name<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 匹配的人名<br />
&nbsp; * <br />
&nbsp; * @return 匹配该任命的全部Person集合<br />
&nbsp; * <br />
&nbsp; */<br />
&nbsp;public List findPersonsByName(final String name){<br />
&nbsp;&nbsp;// 创建HibernateTemplate实例<br />
&nbsp;&nbsp;HibernateTemplate hibernateTemplate =new HibernateTemplate(this.sessionFactory);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 返回HibernateTemplate的execute的结果<br />
&nbsp;&nbsp;return (List) hibernateTemplate.execute(<br />
&nbsp;&nbsp;&nbsp;&nbsp;// 创建匿名内部类<br />
&nbsp;&nbsp;&nbsp;&nbsp;new HibernateCallback(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Object doInHibernate(Session session) throws HibernateException{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 使用条件查询的方法返回<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List result = session.createCriteria(Person.class)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.add(Restrictions.like("name", name+"%").list();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
</p>
<span style="font-family: 宋体">注意：方法</span><span lang="EN-US">doInHibernate</span><span style="font-family: 宋体">方法内可以访问</span><span lang="EN-US">Session</span><span style="font-family: 宋体">，该</span><span lang="EN-US">Session</span><span style="font-family: 宋体">对象是绑定到该线程的</span><span lang="EN-US">Session</span><span style="font-family: 宋体">实例。该方法内的持久层操作，与不使用</span><span lang="EN-US">Spring</span><span style="font-family: 宋体">时的持久层操作完全相同。这保证对于复杂的持久层访问，依然可以使用</span><span lang="EN-US">Hibernate</span><span style="font-family: 宋体">的访问方式。</span><img src ="http://www.blogjava.net/rain1102/aggbug/170638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-26 17:09 <a href="http://www.blogjava.net/rain1102/articles/170638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HibernateTemplate的常规用法</title><link>http://www.blogjava.net/rain1102/articles/170633.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 26 Dec 2007 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/170633.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/170633.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/170633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/170633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/170633.html</trackback:ping><description><![CDATA[<p style="text-indent: 21pt; line-height: 15.7pt">HibernateTemplate<span style="font-family: 宋体">提供非常多的常用方法来完成基本的操作，比如通常的增加、删除、修改、查询等操作，</span>Spring 2.0<span style="font-family: 宋体">更增加对命名</span>SQL<span style="font-family: 宋体">查询的支持，也增加对分页的支持。大部分情况下，使用</span>Hibernate<span style="font-family: 宋体">的常规用法，就可完成大多数</span>DAO<span style="font-family: 宋体">对象的</span>CRUD<span style="font-family: 宋体">操作。下面是</span>HibernateTemplate<span style="font-family: 宋体">的常用方法简介：</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>void delete(Object entity)<span style="font-family: 宋体">：删除指定持久化实例</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>deleteAll(Collection entities)<span style="font-family: 宋体">：删除集合内全部持久化类实例</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>find(String queryString)<span style="font-family: 宋体">：根据</span>HQL<span style="font-family: 宋体">查询字符串来返回实例集合</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>findByNamedQuery(String queryName)<span style="font-family: 宋体">：根据命名查询返回实例集合</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>get(Class entityClass, Serializable id)<span style="font-family: 宋体">：根据主键加载特定持久化类的实例</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>save(Object entity)<span style="font-family: 宋体">：保存新的实例</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>saveOrUpdate(Object entity)<span style="font-family: 宋体">：根据实例状态，选择保存或者更新</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>update(Object entity)<span style="font-family: 宋体">：更新实例的状态，要求</span>entity<span style="font-family: 宋体">是持久状态</span></p>
<p><span style="font-family: Wingdings">q<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>setMaxResults(int maxResults)<span style="font-family: 宋体">：设置分页的大小</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/170633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-26 16:46 <a href="http://www.blogjava.net/rain1102/articles/170633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse 开发 SSH 整合时 java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit 解决方案 </title><link>http://www.blogjava.net/rain1102/articles/169853.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 23 Dec 2007 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/169853.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/169853.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/169853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/169853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/169853.html</trackback:ping><description><![CDATA[ERROR [org.hibernate.proxy.BasicLazyInitializer] - CGLIB Enhancement failed: dao.User<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V<br />
&nbsp;at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77) <br />
<span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">Spring </span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">和</span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%"> Hibernate </span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">共用的一些</span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%"> jar </span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">文件发生了版本冲突</span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">, </span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">删除</span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%"> WEB-INF/lib/asm-2.2.3.jar </span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">然后重启</span><span style="font-size: 10pt; color: #4b4b4b; line-height: 150%"> Tomcat.</span><br />
<span style="font-size: 10pt; color: #4b4b4b; line-height: 150%">asm-2.2.3.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asm.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asm-attrs.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asm-commons-2.2.3.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; asm-util-2.2.3.jar</span><img src ="http://www.blogjava.net/rain1102/aggbug/169853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-23 20:47 <a href="http://www.blogjava.net/rain1102/articles/169853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 参数设置一览表(转)</title><link>http://www.blogjava.net/rain1102/articles/130548.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 16 Jul 2007 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/130548.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/130548.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/130548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/130548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/130548.html</trackback:ping><description><![CDATA[<p align=center>Hibernate 参数设置一览表</p>
<p align=left>&nbsp;</p>
<table summary="                Hibernate配置属性&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>属性名 </th>
            <th>用途 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.dialect</font></tt></td>
            <td>一个Hibernate <tt class=literal><font face=新宋体>Dialect</font></tt>类名允许Hibernate针对特定的关系数据库生成优化的SQL. <span class=strong>取值</span> <tt class=literal><font face=新宋体>full.classname.of.Dialect</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.show_sql</font></tt></td>
            <td>输出所有SQL语句到控制台. 有一个另外的选择是把<tt class=literal><font face=新宋体>org.hibernate.SQL</font></tt>这个log category设为<tt class=literal><font face=新宋体>debug</font></tt>。 <span class=strong>eg.</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.format_sql</font></tt></td>
            <td>在log和console中打印出更漂亮的SQL。 <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.default_schema</font></tt></td>
            <td>在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上. <span class=strong>取值</span> <tt class=literal><font face=新宋体>SCHEMA_NAME</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.default_catalog</font></tt></td>
            <td>在生成的SQL中, 将给定的catalog附加于非全限定名的表名上. <span class=strong>取值</span> <tt class=literal><font face=新宋体>CATALOG_NAME</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.session_factory_name</font></tt></td>
            <td><tt class=literal><font face=新宋体>SessionFactory</font></tt>创建后，将自动使用这个名字绑定到JNDI中. <span class=strong>取值</span> <tt class=literal><font face=新宋体>jndi/composite/name</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.max_fetch_depth</font></tt></td>
            <td>为单向关联(一对一, 多对一)的外连接抓取（outer join fetch）树设置最大深度. 值为<tt class=literal><font face=新宋体>0</font></tt>意味着将关闭默认的外连接抓取. <span class=strong>取值</span> 建议在<tt class=literal><font face=新宋体>0</font></tt>到<tt class=literal><font face=新宋体>3</font></tt>之间取值 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.default_batch_fetch_size</font></tt></td>
            <td>为Hibernate关联的批量抓取设置默认数量. <span class=strong>取值</span> 建议的取值为<tt class=literal><font face=新宋体>4</font></tt>, <tt class=literal><font face=新宋体>8</font></tt>, 和<tt class=literal><font face=新宋体>16</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.default_entity_mode</font></tt></td>
            <td>为由这个<tt class=literal><font face=新宋体>SessionFactory</font></tt>打开的所有Session指定默认的实体表现模式. <span class=strong>取值</span> <tt class=literal><font face=新宋体>dynamic-map</font></tt>, <tt class=literal><font face=新宋体>dom4j</font></tt>, <tt class=literal><font face=新宋体>pojo</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.order_updates</font></tt></td>
            <td>强制Hibernate按照被更新数据的主键，为SQL更新排序。这么做将减少在高并发系统中事务的死锁。 <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.generate_statistics</font></tt></td>
            <td>如果开启, Hibernate将收集有助于性能调节的统计数据. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.use_identifer_rollback</font></tt></td>
            <td>如果开启, 在对象被删除时生成的标识属性将被重设为默认值. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.use_sql_comments</font></tt></td>
            <td>如果开启, Hibernate将在SQL中生成有助于调试的注释信息, 默认值为<tt class=literal><font face=新宋体>false</font></tt>. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
    </tbody>
</table>
<strong>Hibernate JDBC和连接(connection)属性<br>
<table summary="                Hibernate JDBC和连接(connection)属性&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>属性名 </th>
            <th>用途 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.fetch_size</font></tt></td>
            <td>非零值，指定JDBC抓取数量的大小 (调用<tt class=literal><font face=新宋体>Statement.setFetchSize()</font></tt>). </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.batch_size</font></tt></td>
            <td>非零值，允许Hibernate使用JDBC2的批量更新. <span class=strong>取值</span> 建议取<tt class=literal><font face=新宋体>5</font></tt>到<tt class=literal><font face=新宋体>30</font></tt>之间的值 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.batch_versioned_data</font></tt></td>
            <td>如果你想让你的JDBC驱动从<tt class=literal><font face=新宋体>executeBatch()</font></tt>返回正确的行计数 , 那么将此属性设为<tt class=literal><font face=新宋体>true</font></tt>(开启这个选项通常是安全的). 同时，Hibernate将为自动版本化的数据使用批量DML. 默认值为<tt class=literal><font face=新宋体>false</font></tt>. <span class=strong>eg.</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.factory_class</font></tt></td>
            <td>选择一个自定义的<tt class=literal><font face=新宋体>Batcher</font></tt>. 多数应用程序不需要这个配置属性. <span class=strong>eg.</span> <tt class=literal><font face=新宋体>classname.of.Batcher</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.use_scrollable_resultset</font></tt></td>
            <td>允许Hibernate使用JDBC2的可滚动结果集. 只有在使用用户提供的JDBC连接时，这个选项才是必要的, 否则Hibernate会使用连接的元数据. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.use_streams_for_binary</font></tt></td>
            <td>在JDBC读写<tt class=literal><font face=新宋体>binary (二进制)</font></tt>或<tt class=literal><font face=新宋体>serializable (可序列化)</font></tt> 的类型时使用流(stream)(系统级属性). <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jdbc.use_get_generated_keys</font></tt></td>
            <td>在数据插入数据库之后，允许使用JDBC3 <tt class=literal><font face=新宋体>PreparedStatement.getGeneratedKeys()</font></tt> 来获取数据库生成的key(键)。需要JDBC3+驱动和JRE1.4+, 如果你的数据库驱动在使用Hibernate的标 识生成器时遇到问题，请将此值设为false. 默认情况下将使用连接的元数据来判定驱动的能力. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true|false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.connection.provider_class</font></tt></td>
            <td>自定义<tt class=literal><font face=新宋体>ConnectionProvider</font></tt>的类名, 此类用来向Hibernate提供JDBC连接. <span class=strong>取值</span> <tt class=literal><font face=新宋体>classname.of.ConnectionProvider</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.connection.isolation</font></tt></td>
            <td>设置JDBC事务隔离级别. 查看<tt class=literal><font face=新宋体><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.sql.Connection</font></tt>来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离级别. <span class=strong>取值</span> <tt class=literal><font face=新宋体>1, 2, 4, 8</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.connection.autocommit</font></tt></td>
            <td>允许被缓存的JDBC连接开启自动提交(autocommit) (不建议). <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.connection.release_mode</font></tt></td>
            <td>指定Hibernate在何时释放JDBC连接. 默认情况下,直到Session被显式关闭或被断开连接时,才会释放JDBC连接. 对于应用程序服务器的JTA数据源, 你应当使用<tt class=literal><font face=新宋体>after_statement</font></tt>, 这样在每次JDBC调用后，都会主动的释放连接. 对于非JTA的连接, 使用<tt class=literal><font face=新宋体>after_transaction</font></tt>在每个事务结束时释放连接是合理的. <tt class=literal><font face=新宋体>auto</font></tt>将为JTA和CMT事务策略选择<tt class=literal><font face=新宋体>after_statement</font></tt>, 为JDBC事务策略选择<tt class=literal><font face=新宋体>after_transaction</font></tt>. <span class=strong>取值</span> <tt class=literal><font face=新宋体>on_close</font></tt> | <tt class=literal><font face=新宋体>after_transaction</font></tt> | <tt class=literal><font face=新宋体>after_statement</font></tt> | <tt class=literal><font face=新宋体>auto</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.connection.<span class=emphasis><em>&lt;propertyName&gt;</em></span></font></tt></td>
            <td>将JDBC属性<tt class=literal><font face=新宋体>propertyName</font></tt>传递到<tt class=literal><font face=新宋体>DriverManager.getConnection()</font></tt>中去. </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.jndi.<span class=emphasis><em>&lt;propertyName&gt;</em></span></font></tt></td>
            <td>将属性<tt class=literal><font face=新宋体>propertyName</font></tt>传递到JNDI <tt class=literal><font face=新宋体>InitialContextFactory</font></tt>中去. </td>
        </tr>
    </tbody>
</table>
Hibernate缓存属性<br>
<table summary="                Hibernate缓存属性&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>属性名 </th>
            <th>用途 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.provider_class</font></tt></td>
            <td>自定义的<tt class=literal><font face=新宋体>CacheProvider</font></tt>的类名. <span class=strong>取值</span> <tt class=literal><font face=新宋体>classname.of.CacheProvider</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.use_minimal_puts</font></tt></td>
            <td>以频繁的读操作为代价, 优化二级缓存来最小化写操作. 在Hibernate3中，这个设置对的集群缓存非常有用, 对集群缓存的实现而言，默认是开启的. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true|false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.use_query_cache</font></tt></td>
            <td>允许查询缓存, 个别查询仍然需要被设置为可缓存的. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true|false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.use_second_level_cache</font></tt></td>
            <td>能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定<tt class=literal><font face=新宋体>&lt;cache&gt;</font></tt>的类，会默认开启二级缓存. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true|false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.query_cache_factory</font></tt></td>
            <td>自定义实现<tt class=literal><font face=新宋体>QueryCache</font></tt>接口的类名, 默认为内建的<tt class=literal><font face=新宋体>StandardQueryCache</font></tt>. <span class=strong>取值</span> <tt class=literal><font face=新宋体>classname.of.QueryCache</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.region_prefix</font></tt></td>
            <td>二级缓存区域名的前缀. <span class=strong>取值</span> <tt class=literal><font face=新宋体>prefix</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cache.use_structured_entries</font></tt></td>
            <td>强制Hibernate以更人性化的格式将数据存入二级缓存. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true|false</font></tt> </td>
        </tr>
    </tbody>
</table>
Hibernate事务属性<br>
<table summary="                Hibernate事务属性&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>属性名 </th>
            <th>用途 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.transaction.factory_class</font></tt></td>
            <td>一个<tt class=literal><font face=新宋体>TransactionFactory</font></tt>的类名, 用于Hibernate <tt class=literal><font face=新宋体>Transaction</font></tt> API (默认为<tt class=literal><font face=新宋体>JDBCTransactionFactory</font></tt>). <span class=strong>取值</span> <tt class=literal><font face=新宋体>classname.of.TransactionFactory</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>jta.UserTransaction</font></tt></td>
            <td>一个JNDI名字，被<tt class=literal><font face=新宋体>JTATransactionFactory</font></tt>用来从应用服务器获取JTA <tt class=literal><font face=新宋体>UserTransaction</font></tt>. <span class=strong>取值</span> <tt class=literal><font face=新宋体>jndi/composite/name</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.transaction.manager_lookup_class</font></tt></td>
            <td>一个<tt class=literal><font face=新宋体>TransactionManagerLookup</font></tt>的类名 - 当使用JVM级缓存，或在JTA环境中使用hilo生成器的时候需要该类. <span class=strong>取值</span> <tt class=literal><font face=新宋体>classname.of.TransactionManagerLookup</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.transaction.flush_before_completion</font></tt></td>
            <td>如果开启, session在事务完成后将被自动清洗(flush)。 现在更好的方法是使用自动session上下文管理。<span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.transaction.auto_close_session</font></tt></td>
            <td>如果开启, session在事务完成后将被自动关闭。 现在更好的方法是使用自动session上下文管理。<span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
    </tbody>
</table>
其他属性<br>
<table summary="                其他属性&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>属性名 </th>
            <th>用途 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.current_session_context_class</font></tt></td>
            <td>为"当前" <tt class=literal><font face=新宋体>Session</font></tt>指定一个(自定义的)策略。<span class=strong>eg.</span> <tt class=literal><font face=新宋体>jta</font></tt> | <tt class=literal><font face=新宋体>thread</font></tt> | <tt class=literal><font face=新宋体>custom.Class</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.query.factory_class</font></tt></td>
            <td>选择HQL解析器的实现. <span class=strong>取值</span> <tt class=literal><font face=新宋体>org.hibernate.hql.ast.ASTQueryTranslatorFactory</font></tt> or <tt class=literal><font face=新宋体>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.query.substitutions</font></tt></td>
            <td>将Hibernate查询中的符号映射到SQL查询中的符号 (符号可能是函数名或常量名字). <span class=strong>取值</span> <tt class=literal><font face=新宋体>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.hbm2ddl.auto</font></tt></td>
            <td>在<tt class=literal><font face=新宋体>SessionFactory</font></tt>创建时，自动检查数据库结构，或者将数据库schema的DDL导出到数据库. 使用 <tt class=literal><font face=新宋体>create-drop</font></tt>时,在显式关闭<tt class=literal><font face=新宋体>SessionFactory</font></tt>时，将drop掉数据库schema. <span class=strong>取值</span> <tt class=literal><font face=新宋体>validate</font></tt> | <tt class=literal><font face=新宋体>update</font></tt> | <tt class=literal><font face=新宋体>create</font></tt> | <tt class=literal><font face=新宋体>create-drop</font></tt> </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>hibernate.cglib.use_reflection_optimizer</font></tt></td>
            <td>开启CGLIB来替代运行时反射机制(系统级属性). 反射机制有时在除错时比较有用. 注意即使关闭这个优化, Hibernate还是需要CGLIB. 你不能在<tt class=literal><font face=新宋体>hibernate.cfg.xml</font></tt>中设置此属性. <span class=strong>取值</span> <tt class=literal><font face=新宋体>true</font></tt> | <tt class=literal><font face=新宋体>false</font></tt> </td>
        </tr>
    </tbody>
</table>
SQL方言<br>
<p>你应当总是为你的数据库将<tt class=literal><font face=新宋体>hibernate.dialect</font></tt>属性设置成正确的 <tt class=literal><font face=新宋体>org.hibernate.dialect.Dialect</font></tt>子类. 如果你指定一种方言, Hibernate将为上面列出的一些属性使用合理的默认值, 为你省去了手工指定它们的功夫. </p>
Hibernate SQL方言 (<tt class=literal><font face=新宋体>hibernate.dialect</font></tt>) <br>
<table summary="                    Hibernate SQL方言 (hibernate.dialect)&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>RDBMS</th>
            <th>方言 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>DB2</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.DB2Dialect</font></tt></td>
        </tr>
        <tr>
            <td>DB2 AS/400</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.DB2400Dialect</font></tt></td>
        </tr>
        <tr>
            <td>DB2 OS390</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.DB2390Dialect</font></tt></td>
        </tr>
        <tr>
            <td>PostgreSQL</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.PostgreSQLDialect</font></tt></td>
        </tr>
        <tr>
            <td>MySQL</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.MySQLDialect</font></tt></td>
        </tr>
        <tr>
            <td>MySQL with InnoDB</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.MySQLInnoDBDialect</font></tt></td>
        </tr>
        <tr>
            <td>MySQL with MyISAM</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.MySQLMyISAMDialect</font></tt></td>
        </tr>
        <tr>
            <td>Oracle (any version)</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.OracleDialect</font></tt></td>
        </tr>
        <tr>
            <td>Oracle 9i/10g</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.Oracle9Dialect</font></tt></td>
        </tr>
        <tr>
            <td>Sybase</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.SybaseDialect</font></tt></td>
        </tr>
        <tr>
            <td>Sybase Anywhere</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.SybaseAnywhereDialect</font></tt></td>
        </tr>
        <tr>
            <td>Microsoft SQL Server</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.SQLServerDialect</font></tt></td>
        </tr>
        <tr>
            <td>SAP DB</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.SAPDBDialect</font></tt></td>
        </tr>
        <tr>
            <td>Informix</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.InformixDialect</font></tt></td>
        </tr>
        <tr>
            <td>HypersonicSQL</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.HSQLDialect</font></tt></td>
        </tr>
        <tr>
            <td>Ingres</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.IngresDialect</font></tt></td>
        </tr>
        <tr>
            <td>Progress</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.ProgressDialect</font></tt></td>
        </tr>
        <tr>
            <td>Mckoi SQL</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.MckoiDialect</font></tt></td>
        </tr>
        <tr>
            <td>Interbase</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.InterbaseDialect</font></tt></td>
        </tr>
        <tr>
            <td>Pointbase</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.PointbaseDialect</font></tt></td>
        </tr>
        <tr>
            <td>FrontBase</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.FrontbaseDialect</font></tt></td>
        </tr>
        <tr>
            <td>Firebird</td>
            <td><tt class=literal><font face=新宋体>org.hibernate.dialect.FirebirdDialect</font></tt></td>
        </tr>
    </tbody>
</table>
Hibernate日志类别<br>
<table summary="                    Hibernate日志类别&#13;&#10;    " border=1>
    <thead>
        <tr>
            <th>类别 </th>
            <th>功能 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.SQL</font></tt></td>
            <td>在所有SQL DML语句被执行时为它们记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.type</font></tt></td>
            <td>为所有JDBC参数记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.tool.hbm2ddl</font></tt></td>
            <td>在所有SQL DDL语句执行时为它们记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.pretty</font></tt></td>
            <td>在session清洗(flush)时，为所有与其关联的实体(最多20个)的状态记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.cache</font></tt></td>
            <td>为所有二级缓存的活动记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction</font></tt></td>
            <td>为事务相关的活动记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.jdbc</font></tt></td>
            <td>为所有JDBC资源的获取记录日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.hql.AST</font></tt></td>
            <td>在解析查询的时候,记录HQL和SQL的AST分析日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.secure</font></tt></td>
            <td>为JAAS认证请求做日志 </td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate</font></tt></td>
            <td>为任何Hibernate相关信息做日志 (信息量较大, 但对查错非常有帮助) </td>
        </tr>
    </tbody>
</table>
&nbsp;JTA TransactionManagers<br>
<table summary="JTA TransactionManagers" border=1>
    <thead>
        <tr>
            <th>Transaction工厂类 </th>
            <th align=middle>应用程序服务器 </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.JBossTransactionManagerLookup</font></tt></td>
            <td align=middle>JBoss</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.WeblogicTransactionManagerLookup</font></tt></td>
            <td align=middle>Weblogic</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.WebSphereTransactionManagerLookup</font></tt></td>
            <td align=middle>WebSphere</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</font></tt></td>
            <td align=middle>WebSphere 6</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.OrionTransactionManagerLookup</font></tt></td>
            <td align=middle>Orion</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.ResinTransactionManagerLookup</font></tt></td>
            <td align=middle>Resin</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.JOTMTransactionManagerLookup</font></tt></td>
            <td align=middle>JOTM</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.JOnASTransactionManagerLookup</font></tt></td>
            <td align=middle>JOnAS</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.JRun4TransactionManagerLookup</font></tt></td>
            <td align=middle>JRun4</td>
        </tr>
        <tr>
            <td><tt class=literal><font face=新宋体>org.hibernate.transaction.BESTransactionManagerLookup</font></tt></td>
            <td align=middle>Borland ES</td>
        </tr>
    </tbody>
</table>
原文地址：<a href="http://www.ideagrace.com/html/doc/2007/01/30/08608.html">http://www.ideagrace.com/html/doc/2007/01/30/08608.html</a><br></strong><img src ="http://www.blogjava.net/rain1102/aggbug/130548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-07-16 13:46 <a href="http://www.blogjava.net/rain1102/articles/130548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Open Session in Test 及自动Rollback</title><link>http://www.blogjava.net/rain1102/articles/117541.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 15 May 2007 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/117541.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/117541.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/117541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/117541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/117541.html</trackback:ping><description><![CDATA[又是来自Spring这个神奇国度的东西， 你可以让testCase继承于AbstractTransactionalDataSourceSpringContextTests，就可以做到Open Session in Test ，解决Hibernate的lazy-load问题；而且接管原来的DAO里的事务控制定义，通过setDefaultRollback(boolean)方法控制最后回滚还是提交，如果默认为回滚，则测试产生数据变动不会影响数据库内数据。<br>&nbsp;<br>如果不能继承于这个基类，可以自己简单编写，代码是这样的：<br>&nbsp;&nbsp;<span style="COLOR: #008000"> protected PlatformTransactionManager transactionManager;<br>&nbsp;&nbsp; protected TransactionStatus transactionStatus;<br>&nbsp;&nbsp; protected boolean defaultRollback = true;<br>&nbsp;&nbsp; public void setUp()<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transactionManager = (PlatformTransactionManager) ctx.getBean("transactionManager");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition());<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; public void tearDown()<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (defaultRollback)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transactionManager.rollback(this.transactionStatus);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; transactionManager.commit(this.transactionStatus);<br>&nbsp;&nbsp;&nbsp; }<br></span>(注，hibernate太奸诈了，如果全部默认回滚，只会在session里干活，一点不写数据库，达不到完全的测试效果。)<img src ="http://www.blogjava.net/rain1102/aggbug/117541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-05-15 11:09 <a href="http://www.blogjava.net/rain1102/articles/117541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Spring中的回滚问题AbstractTransactionalDataSourceSpringContextTests</title><link>http://www.blogjava.net/rain1102/articles/117518.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 15 May 2007 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/117518.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/117518.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/117518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/117518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/117518.html</trackback:ping><description><![CDATA[AbstractTransactionalDataSourceSpringContextTests缺乏对hibernate session的处理，需要对其进行扩展，扩展基本思路是在事务开始后，结束前把测试方法包装在
<p>HibernateTemaplate.executeWithSession(...){ <br>public Object doInHibernate(Session session) { <br>runTest(); <br>session.flush();//synchornize database, errors will be reported. <br>session.clear();}...}<br>而AbstractTransactionalDataSourceSpringContextTests只要你不调用super.setDefaultRollback(false);这个基类默认就会回滚! 于是由此产生hibernate偷懒,无法发现数据库操作,然后我们建议你在测试中显示调用session.flush <br>或者参杂一些查询调用(其实也是为了触发session.flush)。</p>
<p>不过这里面也有些陷阱:如果你的测试还是会把数据写入了数据库的话,可能是由于你加载的spring配置文件里有多个事务管理器或session工厂,从而导致AbstractTransactionalDataSourceSpringContextTests没有获得正确的TransactionManager或SessionFactory,所以就没能回滚不过这种错误也不太容易犯,因为AbstractTransactionalDataSourceSpringContextTests默认按类型组装,如果她发现有多个TransactionManager类型的bean是要报错的,此时你需要调用setAutowireMode(this.AUTOWIRE_BY_NAME);使其按名称组装。<br><br>另外值得注意的是，使用MYSQL时候表的类型选择。例如</p>
<p><span style="COLOR: rgb(0,0,255)">CREATE</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">TABLE</span><span style="COLOR: rgb(0,0,0)">&nbsp;`myisam`&nbsp;(<br>&nbsp;&nbsp;`id`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">int</span><span style="COLOR: rgb(0,0,0)">(</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">11</span><span style="COLOR: rgb(0,0,0)">)&nbsp;</span><span style="COLOR: rgb(128,128,128)">NOT</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">NULL</span><span style="COLOR: rgb(0,0,0)">&nbsp;auto_increment,<br>&nbsp;&nbsp;`name`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">varchar</span><span style="COLOR: rgb(0,0,0)">(</span><span style="FONT-WEIGHT: bold; COLOR: rgb(128,0,0)">100</span><span style="COLOR: rgb(0,0,0)">)&nbsp;</span><span style="COLOR: rgb(0,0,255)">default</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">NULL</span><span style="COLOR: rgb(0,0,0)">,<br>&nbsp;&nbsp;`content`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: rgb(0,0,0)">text</span><span style="COLOR: rgb(0,0,0)">,<br>&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">PRIMARY</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">KEY</span><span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;(`id`)<br>)&nbsp;ENGINE</span><span style="COLOR: rgb(128,128,128)">=</span><span style="COLOR: rgb(0,0,0)">MyISAM&nbsp;</span><span style="COLOR: rgb(0,0,255)">DEFAULT</span><span style="COLOR: rgb(0,0,0)">&nbsp;CHARSET</span><span style="COLOR: rgb(128,128,128)">=</span><span style="COLOR: rgb(0,0,0)">gbk;<br>这时候应该把类型改为InnoDB。</span></p>
<p><span style="COLOR: rgb(0,0,0)">MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎：&#183; MyISAM管理非事务表。它提供高速存储和检索，以及全文搜索能力。MyISAM在所有MySQL配置里被支持，它是默认的存储引擎，除非你配置 MySQL默认使用另外一个引擎。 &#183;MEMORY存储引擎提供&#8220;内存中&#8221;表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样， MEMORY和MERGE存储引擎处理非事务表，这两个引擎也都被默认包含在MySQL中。 释：MEMORY存储引擎正式地被确定为HEAP引擎。&#183; InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里，你可以按照喜好通过配置MySQL来允许或禁止任一引擎。&#183;EXAMPLE存储引擎是一个&#8220;存根&#8221;引擎，它不做什么。你可以用这个 引擎创建表，但没有数据被存储于其中或从其中检索。</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/117518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-05-15 10:06 <a href="http://www.blogjava.net/rain1102/articles/117518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中的多对多映射</title><link>http://www.blogjava.net/rain1102/articles/109628.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 10 Apr 2007 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/109628.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/109628.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/109628.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/109628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/109628.html</trackback:ping><description><![CDATA[Payment.java<br><br><span style="COLOR: #003300">private Set&lt;Subscription&gt; subscriptions = new HashSet&lt;Subscription&gt;(0);</span><br><br>Subscription.java<br><br><span style="COLOR: #003300">&nbsp;private Set&lt;Payment&gt; payments = new HashSet&lt;Payment&gt;(0);</span><br><br>Payment.hbm.xml<br><br><span style="COLOR: #003300">&lt;set name="subscriptions" table="subscriptionpayment" inverse="false"<br>&nbsp;&nbsp;&nbsp;cascade="none"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;key&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;column name="PaymentID" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/key&gt;<br>&nbsp;&nbsp;&nbsp;&lt;many-to-many class="com.test.eric.model.Subscription"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;column name="SubscriptionID" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/many-to-many&gt;<br>&nbsp;&lt;/set&gt;</span><br><br>Subscription.hbm.xml<br><br><span style="COLOR: #003300">&lt;set name="payments" table="subscriptionpayment" inverse="false"<br>&nbsp;&nbsp;&nbsp;cascade="none"&gt;<br>&nbsp;&nbsp;&nbsp;&lt;key&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;column name="SubscriptionID" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/key&gt;<br>&nbsp;&nbsp;&nbsp;&lt;many-to-many class="com.test.eric.model.Payment"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;column name="PaymentID" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/many-to-many&gt;<br>&nbsp;&lt;/set&gt;</span><img src ="http://www.blogjava.net/rain1102/aggbug/109628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-04-10 14:31 <a href="http://www.blogjava.net/rain1102/articles/109628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中的主键生成方法native与assigned</title><link>http://www.blogjava.net/rain1102/articles/108395.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 04 Apr 2007 03:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/108395.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/108395.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/108395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/108395.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/108395.html</trackback:ping><description><![CDATA[在用Hibernate的时候，当有表中的主键是库自动生成的时候将使用native。<br>&lt;generator class="native"&gt;&lt;/generator&gt;<br>而当是自己添加的时候则需要改为assigned。<br>&lt;generator class="assigned"&gt;&lt;/generator&gt;<br>否则将会出现异常！<img src ="http://www.blogjava.net/rain1102/aggbug/108395.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-04-04 11:46 <a href="http://www.blogjava.net/rain1102/articles/108395.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于组的用户权限管理在Spring框架下的实现</title><link>http://www.blogjava.net/rain1102/articles/88791.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 19 Dec 2006 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/88791.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/88791.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/88791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/88791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/88791.html</trackback:ping><description><![CDATA[<p>在几乎所有的web应用中都需要对访问者(用户)进行权限管理, 因为我们希望某些页面只对特定的用户开放, 以及某些操作只有符合身份的用户才能进行. 这之中涉及到了身份验证和权限管理. 只有单用户系统和多用户单权限系统才不需要权限管理. </p>
		<p>在本文中, 使用了基于组的权限管理, 并在Spring框架下利用HandlerInterceptorAdapter和Hibernate进行实现. </p>
		<p>User的结构是: <br />public class User {<br /><br />	private int id;<br /><br />	private String name;<br /><br />	private String password;<br /><br />	private Set&lt;String&gt; groups = new HashSet&lt;String&gt;();<br />}<br /></p>
		<p>UserGroup表: </p>
		<pre>user:int
group:String
</pre>
		<p>使用联合主键, 在Java中没有对应的类. </p>
		<p>Hibernate映射文件是: <br />&lt;hibernate-mapping auto-import="true" default-lazy="false"&gt;<br />	&lt;class name="net.ideawu.User" table="User"&gt;<br />		&lt;cache usage="read-write" /&gt;<br />		&lt;id name="id" column="id"&gt;<br />			&lt;generator class="native"/&gt;<br />		&lt;/id&gt;<br />		&lt;property name="name" column="name"/&gt;<br />		&lt;property name="password" column="password"/&gt;<br />		&lt;set name="groups" table="UserGroup" cascade="save-update" lazy="false"&gt;<br />			&lt;key column="user" /&gt;<br />			&lt;element column="`group`" type="string" /&gt;<br />		&lt;/set&gt;<br />	&lt;/class&gt;<br />&lt;/hibernate-mapping&gt;<br />一切的身份验证交给一个继承HandlerInterceptorAdapter的类来做: <br />import org.springframework.web.util.UrlPathHelper;<br />import org.springframework.util.AntPathMatcher;<br />import org.springframework.util.PathMatcher;<br />...<br /><br />public class AuthorizeInterceptor extends HandlerInterceptorAdapter {<br /><br />	private UrlPathHelper urlPathHelper = new UrlPathHelper();<br /><br />	private PathMatcher pathMatcher = new AntPathMatcher();<br /><br />	private  Properties groupMappings;<br /><br />	/**<br />	 * Attach URL paths to group.<br />	 */<br />	public void setGroupMappings(Properties groupMappings) {<br />		this.groupMappings = groupMappings;<br />	}<br /><br />	public boolean preHandle(HttpServletRequest request,<br />			HttpServletResponse response,<br />			Object handler) throws Exception {<br />		String url = urlPathHelper.getLookupPathForRequest(request);<br />		String group = lookupGroup(url);	// 找出资源所需要的权限, 即组名<br />		if(group == null){	// 所请求的资源不需要保护.<br />			return true;<br />		}<br />		// 如果已经登录, 一个User实例被保存在session中.<br />		User loginUser = (User)request.getSession().getAttribute("loginUser");<br />		ModelAndView mav = new ModelAndView("system/authorizeError");<br />		if(loginUser == null){<br />			mav.addObject("errorMsg", "你还没有登录!");<br />			throw new ModelAndViewDefiningException(mav);<br />		}else{<br />			if(!loginUser.getGroups().contains(group)){<br />				mav.addObject("errorMsg", "授权失败! 你不在 &lt;b&gt;" + group + "&lt;/b&gt; 组!");<br />				throw new ModelAndViewDefiningException(mav);<br />			}<br />			return true;<br />		}<br />	}<br /><br />	/*<br />	 * 查看 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.lookupHandler()<br />	 * Ant模式的最长子串匹配法.<br />	 */<br />	private String lookupGroup(String url){<br />		String group =  groupMappings.getProperty(url);<br />		if (group == null) {<br />			String bestPathMatch = null;<br />			for (Iterator it = this.groupMappings.keySet().iterator(); it.hasNext();) {<br />				String registeredPath = (String) it.next();<br />				if (this.pathMatcher.match(registeredPath, url) &amp;&amp;<br />							(bestPathMatch == null || bestPathMatch.length() &lt;= registeredPath.length())) {<br />					group = this.groupMappings.getProperty(registeredPath);<br />					bestPathMatch = registeredPath;<br />				}<br />			}<br />		}<br />		return group;<br />	}<br />}<br /></p>
		<p>下面我们需要在Spring的应用上下文配置文件中设置: <br /></p>
		<pre>&lt;bean id="authorizeInterceptor" class="net.ideawu.AuthorizeInterceptor"&gt;
	&lt;property name="groupMappings"&gt;
		&lt;value&gt;
			&lt;!-- Attach URL paths to group --&gt;
			/admin/*=admin
		&lt;/value&gt;
	&lt;/property&gt;
&lt;/bean&gt;

&lt;bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;
	&lt;property name="interceptors"&gt;
		&lt;list&gt;
			&lt;ref bean="authorizeInterceptor" /&gt;
		&lt;/list&gt;
	&lt;/property&gt;
	&lt;property name="mappings"&gt;
		&lt;value&gt;
			/index.do=indexController
			/browse.do=browseController
			/admin/removeArticle.do=removeArticleController
		&lt;/value&gt;
	&lt;/property&gt;
&lt;/bean&gt;
</pre>
		<p>注意到"/admin/*=admin", 所以/admin目录下的所有资源只有在admin组的用户才能访问, 这样就不用担心普通访客删除文章了. 使用这种方法, 你不需要在removeArticleController中作身份验证和权限管理, 一切都交给AuthorizeInterceptor. </p><img src ="http://www.blogjava.net/rain1102/aggbug/88791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-12-19 14:40 <a href="http://www.blogjava.net/rain1102/articles/88791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork+spring+hibernate架构目录结构</title><link>http://www.blogjava.net/rain1102/articles/86877.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 11 Dec 2006 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/86877.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/86877.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/86877.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/86877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/86877.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="0" width="500" border="0">
				<tbody>
						<tr>
								<td width="10">
								</td>
								<td width="490">
										<span class="oblog_text">
												<p class="MsoNormal">
														<span lang="EN-US">
																<span>     转自<a href="/black_zerg/archive/2005/05/30/5327.html">http://www.blogjava.net/black_zerg/archive/2005/05/30/5327.html</a>  </span>
														</span>
												</p>
												<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1">
														<tbody>
																<tr>
																		<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="284">
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.blogjava.net/images/blogjava_net/black_zerg/1560/o_image002.jpg" width="200" onload="javascript:if(this.width&gt;1000){this.resized=true;this.style.width=1000;}" border="0" />
																						</span>
																				</p>
																		</td>
																		<td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="284">
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span>       </span>
																						</span>
																						<span style="FONT-FAMILY: 宋体">在</span>
																						<span lang="EN-US">src</span>
																						<span style="FONT-FAMILY: 宋体">目录下为</span>
																						<span lang="EN-US">
																								<a title="Java爱好者" href="/rain1102">Java</a>
																						</span>
																						<span style="FONT-FAMILY: 宋体">源码</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">dao<span>    </span></span>
																						</b>
																						<b>
																								<span style="FONT-FAMILY: 宋体">负责数据访问对象的定义和实现</span>
																								<span lang="EN-US">
																										<?xml:namespace prefix = o /?>
																										<o:p>
																										</o:p>
																								</span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>
																						</span>
																						<span style="FONT-FAMILY: 宋体">其中</span>
																						<span lang="EN-US">Dao</span>
																						<span style="FONT-FAMILY: 宋体">结尾为接口，</span>
																						<span lang="EN-US">Impl</span>
																						<span style="FONT-FAMILY: 宋体">结尾为实现。目前一般用</span>
																						<span lang="EN-US">hibernate</span>
																						<span style="FONT-FAMILY: 宋体">做实现。<br /></span>
																						<b>
																								<span lang="EN-US">domain </span>
																						</b>
																						<b>
																								<span style="FONT-FAMILY: 宋体">实体对象<br /><br /></span>
																						</b>
																						<b>
																								<span lang="EN-US">logic<span>   </span></span>
																						</b>
																						<b>
																								<span style="FONT-FAMILY: 宋体">针对实体对象封装的逻辑</span>
																								<span lang="EN-US">
																										<o:p>
																										</o:p>
																								</span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">
																										<span> </span>
																								</span>
																						</b>
																						<span style="FONT-FAMILY: 宋体">这里</span>
																						<span lang="EN-US">service</span>
																						<span style="FONT-FAMILY: 宋体">是外观接口，</span>
																						<span lang="EN-US">serviceimpl</span>
																						<span style="FONT-FAMILY: 宋体">是实现，考虑目前情况简单，并没有进一步分离逻辑，业务逻辑都在</span>
																						<span lang="EN-US">impl</span>
																						<span style="FONT-FAMILY: 宋体">中完成。</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">web<span>    </span></span>
																						</b>
																						<b>
																								<span style="FONT-FAMILY: 宋体">界面相关的</span>
																								<span lang="EN-US">
																										<a title="Java爱好者" href="/rain1102">Java</a>
																								</span>
																						</b>
																						<b>
																								<span style="FONT-FAMILY: 宋体">类</span>
																								<span lang="EN-US">
																										<o:p>
																										</o:p>
																								</span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>
																								<span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid">common</span>
																						</span>
																						<span style="FONT-FAMILY: 宋体">是一些常用类，如处理中文问题的</span>
																						<span lang="EN-US">filter.</span>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>
																								<span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid">displaytag</span>
																						</span>
																						<span style="FONT-FAMILY: 宋体">中放了</span>
																						<span lang="EN-US">displaytag</span>
																						<span style="FONT-FAMILY: 宋体">相关的类，多为</span>
																						<span lang="EN-US">wrapper.</span>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>
																								<span style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 0cm; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid">webwork</span>
																						</span>
																						<span style="FONT-FAMILY: 宋体">中都是对应的</span>
																						<span lang="EN-US">action</span>
																						<span style="FONT-FAMILY: 宋体">，</span>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 10.5pt">
																						<span style="FONT-FAMILY: 宋体">其中</span>
																						<span lang="EN-US"> BaseAction</span>
																						<span style="FONT-FAMILY: 宋体">是基本的抽象类，基本后续开发应继承此类</span>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 10.5pt">
																						<span lang="EN-US">CrudAction</span>
																						<span style="FONT-FAMILY: 宋体">是为了一般的</span>
																						<span lang="EN-US">Crud</span>
																						<span style="FONT-FAMILY: 宋体">工作而作的一个抽象类，可以继承用来简化工作。</span>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 10.5pt">
																						<span style="FONT-FAMILY: 宋体">而</span>
																						<span lang="EN-US">CaseDispatcher</span>
																						<span style="FONT-FAMILY: 宋体">负责菜单点击后分发到相关</span>
																						<span lang="EN-US">Action</span>
																						<span style="FONT-FAMILY: 宋体">，同时处理权限和</span>
																						<span lang="EN-US">session</span>
																						<span style="FONT-FAMILY: 宋体">工作。<br />  </span>
																						<span style="FONT-FAMILY: 宋体">其他</span>
																						<span lang="EN-US">action</span>
																						<span style="FONT-FAMILY: 宋体">按模块进行了组织</span>
																				</p>
																		</td>
																</tr>
																<tr>
																		<td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" valign="top" width="284">
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<img style="CURSOR: pointer" onclick="javascript:window.open(this.src);" src="http://www.blogjava.net/images/blogjava_net/black_zerg/1560/o_image004.jpg" width="200" onload="javascript:if(this.width&gt;1000){this.resized=true;this.style.width=1000;}" border="0" />
																						</span>
																				</p>
																		</td>
																		<td style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 213.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" valign="top" width="284">
																				<p class="MsoNormal">
																						<span style="FONT-FAMILY: 宋体">左边是</span>
																						<span lang="EN-US">webroot</span>
																						<span style="FONT-FAMILY: 宋体">的结构</span>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<o:p> </o:p>
																						</span>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<o:p> </o:p>
																						</span>
																				</p>
																				<p class="MsoNormal">
																						<span style="FONT-FAMILY: 宋体">重要的配置文件有：</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">Spring<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 5.25pt">
																						<span lang="EN-US">applicationContext.xml</span>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 5.25pt">
																						<span lang="EN-US">applicationContext-db.xml</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">Webwork<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 5.25pt">
																						<span lang="EN-US">xwork.xml</span>
																				</p>
																				<p class="MsoNormal" style="TEXT-INDENT: 5.25pt">
																						<span lang="EN-US">webwork.properties</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">i18n<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>labels.properties</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">log4j<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>log4j.properties</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">displaytag<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>displaytag.properties</span>
																				</p>
																				<p class="MsoNormal">
																						<b>
																								<span lang="EN-US">dbConnect<o:p></o:p></span>
																						</b>
																				</p>
																				<p class="MsoNormal">
																						<span lang="EN-US">
																								<span> </span>jdbc.properties</span>
																				</p>
																		</td>
																</tr>
														</tbody>
												</table>
												<p class="MsoNormal">
														<span lang="EN-US">
																<o:p> </o:p>
														</span>
												</p>
												<p class="MsoNormal">
														<span style="FONT-FAMILY: 宋体">关于一些技术难点和细节：</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>1．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">各框架连接：</span>
														<span lang="EN-US">spring</span>
														<span style="FONT-FAMILY: 宋体">到</span>
														<span lang="EN-US">hibernate</span>
														<span style="FONT-FAMILY: 宋体">使用</span>
														<span lang="EN-US">spring</span>
														<span style="FONT-FAMILY: 宋体">的</span>
														<span lang="EN-US">hibernate</span>
														<span style="FONT-FAMILY: 宋体">支持。</span>
														<span lang="EN-US">Spring</span>
														<span style="FONT-FAMILY: 宋体">到</span>
														<span lang="EN-US">webwork</span>
														<span style="FONT-FAMILY: 宋体">使用</span>
														<span lang="EN-US">autoware</span>
														<span style="FONT-FAMILY: 宋体">的拦截机制自动装配。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>2．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">列表的问题，采用</span>
														<span lang="EN-US">displaytag</span>
														<span style="FONT-FAMILY: 宋体">。功能强大，使用简洁，可实现排序和数据导出。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>3．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">数据下载，使用</span>
														<span lang="EN-US">displaytag</span>
														<span style="FONT-FAMILY: 宋体">自带的</span>
														<span lang="EN-US">excel</span>
														<span style="FONT-FAMILY: 宋体">下载</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>4．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">文件上传，使用</span>
														<span lang="EN-US">webwork</span>
														<span style="FONT-FAMILY: 宋体">提供的解决方案，用拦截机制实现。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>5．</span>
														</span>
														<span lang="EN-US">jsp</span>
														<span style="FONT-FAMILY: 宋体">代码组织方面，我们使用</span>
														<span lang="EN-US">taglib</span>
														<span style="FONT-FAMILY: 宋体">和</span>
														<span lang="EN-US">css</span>
														<span style="FONT-FAMILY: 宋体">技术使</span>
														<span lang="EN-US">jsp</span>
														<span style="FONT-FAMILY: 宋体">中页面逻辑减少到最小，一般情况完全可以不使用</span>
														<span lang="EN-US">&lt;% %&gt;</span>
														<span style="FONT-FAMILY: 宋体">的</span>
														<span lang="EN-US">script</span>
														<span style="FONT-FAMILY: 宋体">段</span>
														<span style="FONT-FAMILY: 宋体">。同时我们使用两个</span>
														<span lang="EN-US">include</span>
														<span style="FONT-FAMILY: 宋体">来包含常用的</span>
														<span lang="EN-US">taglib</span>
														<span style="FONT-FAMILY: 宋体">定义，</span>
														<span lang="EN-US">js</span>
														<span style="FONT-FAMILY: 宋体">引用和</span>
														<span lang="EN-US">html</span>
														<span style="FONT-FAMILY: 宋体">结构，使</span>
														<span lang="EN-US">jsp</span>
														<span style="FONT-FAMILY: 宋体">代码非常简洁。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>6．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">中文问题</span>
														<span style="FONT-FAMILY: 宋体">我们使用</span>
														<span lang="EN-US">filter</span>
														<span style="FONT-FAMILY: 宋体">来解决页面</span>
														<span lang="EN-US">gbk</span>
														<span style="FONT-FAMILY: 宋体">到</span>
														<span lang="EN-US">
																<a title="Java爱好者" href="/rain1102">Java</a>
														</span>
														<span style="FONT-FAMILY: 宋体">程序</span>
														<span lang="EN-US">unicode</span>
														<span style="FONT-FAMILY: 宋体">的转换，同时通过正确的设置数据库连接</span>
														<span lang="EN-US">url</span>
														<span style="FONT-FAMILY: 宋体">完成和数据库之间的交互。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>7．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span lang="EN-US">I18n</span>
														<span style="FONT-FAMILY: 宋体">国际化。我们要求在</span>
														<span lang="EN-US">jsp</span>
														<span style="FONT-FAMILY: 宋体">代码中不出现中文，所有提示信息都通过资源文件</span>
														<span lang="EN-US">labels.properties</span>
														<span style="FONT-FAMILY: 宋体">来完成。页面中可以使用</span>
														<span lang="EN-US">jstl</span>
														<span style="FONT-FAMILY: 宋体">或</span>
														<span lang="EN-US">webwork</span>
														<span style="FONT-FAMILY: 宋体">标签来调用。</span>
												</p>
												<p class="MsoNormal" style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">
														<span lang="EN-US">
																<span>8．<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span>
														</span>
														<span style="FONT-FAMILY: 宋体">界面验证问题。使用</span>
														<span lang="EN-US">webwork</span>
														<span style="FONT-FAMILY: 宋体">的</span>
														<span lang="EN-US">validate</span>
														<span style="FONT-FAMILY: 宋体">机制用</span>
														<span lang="EN-US">xml</span>
														<span style="FONT-FAMILY: 宋体">定义，或在</span>
														<span lang="EN-US">action</span>
														<span style="FONT-FAMILY: 宋体">中代码判断。</span>
												</p>
										</span>
								</td>
						</tr>
				</tbody>
		</table><img src ="http://www.blogjava.net/rain1102/aggbug/86877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-12-11 13:21 <a href="http://www.blogjava.net/rain1102/articles/86877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HQL查询中的中文参数解决之道</title><link>http://www.blogjava.net/rain1102/articles/69872.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 15 Sep 2006 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69872.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69872.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69872.html</trackback:ping><description><![CDATA[在Hibernate配置文件中加入下面代码：<br />&lt;property name="<font color="#ff1493">hibernate.query.factory_class</font>"&gt;<font color="#006400">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</font>&lt;/property&gt;<br />如果是Spring+Hibernate开发，则在定义Hibernate配置属性时候加入：<br />&lt;property name="<font color="#ff1493">hibernateProperties</font>"&gt;<br />  &lt;props&gt;<br />    &lt;prop key="<font color="#ff1493">hibernate.query.factory_class</font>"&gt;<font color="#006400">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</font>&lt;/prop&gt; <br /> &lt;/props&gt;<br />&lt;/property&gt;<br /><br /><font size="2"><font face="宋体">设定数据库连接方式是</font><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana">UTF-8</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">。例如连接</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana">MYSQL</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">时配置</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana">URL</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">如下：这是在</span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana">hibernate.cfg.xml</span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">文件里设置：</span><span lang="EN-US" style="FONT-SIZE: 9pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana"></span><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Verdana">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=UTF-8</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">或加两个属性</span></font><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: "><br /><font size="3">&lt;</font></span><font size="3"><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f; FONT-FAMILY: ">property</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #7f007f; FONT-FAMILY: "> name</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: ">=</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #2a00ff; FONT-FAMILY: ">"connection.useUnicode"</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&gt;</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: ">true</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&lt;/</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f; FONT-FAMILY: ">property</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&gt;</span></font><font size="3"><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: "><br /></span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&lt;</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f; FONT-FAMILY: ">property </span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #7f007f; FONT-FAMILY: ">name</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: ">=</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #2a00ff; FONT-FAMILY: ">"connection.characterEncoding"</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&gt;</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: ">UTF-8</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&lt;/</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: #3f7f7f; FONT-FAMILY: ">property</span><span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: teal; FONT-FAMILY: ">&gt;</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana"></span></font><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体"><br /><font size="2">注意，上述写法是</font></span><font size="2"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">hibernate</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">的</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">hibernate.cfg.xml</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">写法</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">.</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">最后要注意的是在</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">tomcat</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">中</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">&amp;amp;</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">要写成</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana">&amp;</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">即可。</span></font><img src ="http://www.blogjava.net/rain1102/aggbug/69872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-15 13:26 <a href="http://www.blogjava.net/rain1102/articles/69872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring+Hibernate中的applicationContext.xml配制</title><link>http://www.blogjava.net/rain1102/articles/69851.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 15 Sep 2006 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69851.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69851.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69851.html</trackback:ping><description><![CDATA[&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;<br /> <br />&lt;beans&gt;<br /> &lt;bean id="<font color="#ff0000">dataSource</font>" class="<font color="#009933">org.apache.commons.dbcp.BasicDataSource</font>" destroy-method="close"&gt;<br />  &lt;property name="<font color="#ff0000">driverClassName</font>"&gt;<br />   &lt;value&gt;<font color="#009933">com.microsoft.jdbc.sqlserver.SQLServerDriver</font>&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="<font color="#ff1493">url</font>"&gt;<br />   &lt;value&gt;<font color="#009900">jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=addressbook</font>&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="username"&gt;<br />   &lt;value&gt;sa&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;sa&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /><font color="#800080"> &lt;!-- 配置sessionFactory, 注意这里引入的包的不同  --&gt;</font><font color="#7fffd4"><br /></font> &lt;bean id="<font color="#ff1493">sessionFactory</font>" class="<font color="#009933">org.springframework.orm.hibernate3.LocalSessionFactoryBean</font>"&gt;<br />  &lt;property name="<font color="#ff1493">dataSource</font>"&gt;<br />      &lt;ref local="<font color="#008000">dataSource</font>" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="<font color="#ff1493">mappingResources</font>"&gt;<br />     &lt;list&gt;<br />        &lt;value&gt;<font color="#008000">com/netmarch/Hibernate/Userl.hbm.xml</font>&lt;/value&gt;<br />     &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="<font color="#ff1493">hibernateProperties</font>"&gt;<br />    &lt;props&gt;<br />      &lt;prop key="<font color="#ff1493">hibernate.dialect</font>"&gt;<font color="#008000">org.hibernate.dialect.SQLServerDialect</font>&lt;/prop&gt;<br />      &lt;prop key="<font color="#ff1493">hibernate.show_sql</font>"&gt;<font color="#008000">true</font>&lt;/prop&gt;<br />    &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean id="<font color="#ff1493">transactionManager</font>" class="<font color="#008000">org.springframework.orm.hibernate3.HibernateTransactionManager</font>"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean id="userDAO" class="com.netmarch.dao.daoimp.UserDAOImp"&gt;<br />    &lt;property name="sessionFactory"&gt;<br />       &lt;ref local="sessionFactory" /&gt;<br />    &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean id="userDAOProxy" class="<font color="#008000">org.springframework.transaction.interceptor.TransactionProxyFactoryBean</font>"&gt;<br />    &lt;property name="transactionManager"&gt;<br />       &lt;ref bean="transactionManager" /&gt;<br />    &lt;/property&gt;<br />    &lt;property name="target"&gt;<br />       &lt;ref local="userDAO" /&gt;<br />    &lt;/property&gt;<br />    &lt;property name="<font color="#ff1493">transactionAttributes</font>"&gt;<br />      &lt;props&gt;<br />        &lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;<br />        &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />        &lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<br />     &lt;/props&gt;<br />   &lt;/property&gt;<br /> &lt;/bean&gt;<br /> <br /> &lt;bean name="/login" class="com.netmarch.struts.action.LoginAction" singleton="false"&gt;<br />    &lt;property name="userDAO"&gt;<br />       &lt;ref bean="userDAOProxy" /&gt;<br />    &lt;/property&gt;<br /> &lt;/bean&gt;<br />&lt;/beans&gt;<br /><br /><font size="2">1． SessionFactory的引入<br />Hibernate中通过SessionFactory创建和维护Session。Spring对SessionFactory的配置也进行了整合，无需再通过Hibernate.cfg.xml对SessionFactory进行设定。SessionFactory节点的mappingResources属性包含了映射文件的路径，list节点下可配置多个映射文件。hibernateProperties节点则容纳了所有的属性配置。<br />2． 采用面向Hibernate的TransactionManager实现：org.springframework.orm.hibernate.HibernateTransactionManager</font><img src ="http://www.blogjava.net/rain1102/aggbug/69851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-15 11:49 <a href="http://www.blogjava.net/rain1102/articles/69851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate实现级联下拉单</title><link>http://www.blogjava.net/rain1102/articles/69348.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69348.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69348.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69348.html</trackback:ping><description><![CDATA[
		<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;kind.html&lt;/title&gt;<br />  &lt;script type="text/javascript" src="js/common.js"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript"&gt;<br />    function refreshModelList(){ <br />      var oneName=document.getElementById("kindone").value;<br />      if(oneName==""){<br />        clearlist();<br />        return;<br />      }<br />      var url="kind.do?method=search&amp;&amp;kindid="+oneName;<br />     <br />      createXMLHttpRequest();<br />      <br />      xmlHttp.onreadystatechange=handleStateChange;<br />      xmlHttp.open("GET",url,true);<br />      xmlHttp.send(null);<br />      <br />    }<br />    function handleStateChange(){<br />      if(xmlHttp.readyState==4){ <br />        if(xmlHttp.status==200){<br />          setNames(); <br />        }<br />      }<br />    }<br />    function clearlist(){<br />      var models=document.getElementById("kindtwo");<br />      while(models.childNodes.length&gt;0){<br />        models.removeChild(models.childNodes[0]);<br />      }<br />    }<br />    function setNames(){<br />      clearlist();<br />      var models=document.getElementById("kindtwo");<br />      var xmlDoc=xmlHttp.responseXML;<br />      var results=xmlDoc.getElementsByTagName("kind");<br />      var option=null;<br />      for(var i=0;i&lt;results.length;i++){<br />        option=document.createElement("option");<br />        option.appendChild(document.createTextNode(results[i].firstChild.nodeValue));<br />        models.appendChild(option);<br />      }<br />    }<br />  &lt;/script&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />    &lt;h2&gt;dynamicLists&lt;/h2&gt;<br />    &lt;select id="kindone" onchange="refreshModelList();"&gt;<br />      &lt;option value="1"&gt;a&lt;/option&gt;<br />      &lt;option value="2"&gt;b&lt;/option&gt;<br />      &lt;option value="3"&gt;c&lt;/option&gt;<br />      &lt;option value="4"&gt;d&lt;/option&gt;<br />    &lt;/select&gt;<br />    &lt;select id="kindtwo"&gt;<br />    &lt;/select&gt;<br />  &lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<hr />
/*<br /> * Generated by MyEclipse Struts<br /> * Template path: templates/java/JavaClass.vtl<br /> */<br />package com.rain.struts.action; 
<p>import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.util.Iterator;<br />import java.util.List;</p><p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.actions.DispatchAction;<br />import org.apache.struts.validator.DynaValidatorForm;</p><p>import com.rain.bean.KindDao;</p><p>/** <br /> * MyEclipse Struts<br /> * Creation date: 09-13-2006<br /> * <br /> * XDoclet definition:<br /> * @struts.action parameter="method"<br /> */<br />public class KindAction extends DispatchAction {<br /> /*<br />  * Generated Methods<br />  */</p><p> /** <br />  * Method execute<br />  * @param mapping<br />  * @param form<br />  * @param request<br />  * @param response<br />  * @return ActionForward<br />  */<br /> public ActionForward search(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  DynaValidatorForm kindForm = (DynaValidatorForm)form;<br />  KindDao dao=new KindDao();<br />  int kindid=Integer.parseInt(kindForm.getString("kindid"));<br />  List list=dao.findAllKind(kindid);<br />  Iterator it=list.iterator();<br />  if(it.hasNext()){<br />   PrintWriter out;<br />   try {<br />    response.setContentType("text/xml;charset=UTF-8");<br />    response.setHeader("Cache-Control", "no-cache");<br />    out = response.getWriter();<br /><br />    out.println("&lt;response&gt;");<br />    while(it.hasNext()){<br />     String name=it.next().toString();<br />     out.println("&lt;kind&gt;"+name+"&lt;/kind&gt;");<br />    }<br />    out.println("&lt;/response&gt;");<br />    it=null;<br />    out.close();<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />   <br />  }else{<br />   response.setStatus(HttpServletResponse.SC_NO_CONTENT);<br />  }<br />  // TODO Auto-generated method stub<br />  return null;<br /> }<br />}</p><img src ="http://www.blogjava.net/rain1102/aggbug/69348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 12:45 <a href="http://www.blogjava.net/rain1102/articles/69348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate注册</title><link>http://www.blogjava.net/rain1102/articles/69302.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69302.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69302.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69302.html</trackback:ping><description><![CDATA[
		<p>HTML代码<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;用户注册&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;style type="text/css"&gt;<br />td {<br /> font-size:12px;<br /> color:#000033;<br />}<br />span {<br /> font-size:12px;<br /> color:#FF0000;<br /> text-align:center;<br /> height:20px;<br /> vertical-align:bottom;<br />}<br />input {<br /> border:0px;<br /> border-bottom:1px #666666 dotted;<br /> color:#3399FF;<br />}<br />&lt;/style&gt;<br />&lt;script language="JavaScript"&gt;<br />  var xmlHttp;<br />  function createXMLHttpRequest(){<br />  if(window.ActiveXObject){<br />     try {<br />    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");<br />  } catch (e) {<br />  try {<br />    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<br />   } catch (e) {}<br />  }<br />   }else if(window.XMLHttpRequest){<br />     xmlHttp = new XMLHttpRequest();<br />  if (xmlHttp.overrideMimeType) {<br />    xmlHttp.overrideMimeType('text/xml');<br />   }<br />   }<br />   if (!xmlHttp) { <br />   window.alert("Could not create XMLHttpRequest.");<br />   return false;<br />   }<br />  }<br />  function checkUsername(obj){<br />    createXMLHttpRequest();<br />    document.getElementById("usernameview").innerHTML="";<br />    var url="login.do?method=checkUserName&amp;&amp;UserName="+obj;<br />    xmlHttp.onreadystatechange=handleStateChange;<br />    xmlHttp.open("GET",url,true);<br />    xmlHttp.send(null);<br />  }<br />  function handleStateChange(){<br />    if(xmlHttp.readyState==4){<br />        if(xmlHttp.status==200){<br />          document.getElementById("usernameview").innerHTML=xmlHttp.responseText;<br />        }<br />      }<br />  }<br />  function checkPassword(obj){<br />    document.getElementById("pwdview").innerHTML="";<br />    if(obj.length&lt;6){<br />      document.getElementById("pwdview").innerHTML="密码长度不能小于六位！";<br />    }<br />    else{<br />      document.getElementById("pwdview").innerHTML="√";<br />    }<br />  }<br />  function checkPassword2(obj){<br />    var pwd1=document.getElementById("password1").value;<br />    document.getElementById("usernameview").innerHTML="";<br />    if(obj!=pwd1||obj==null)<br />    {<br />      document.getElementById("pwd2view").innerHTML="两次输入的密码不一致！";<br />    }else{<br />      document.getElementById("pwd2view").innerHTML="√";<br />    }<br />  }<br />  function checkRealName(obj){<br />    if(obj==null){<br />       document.getElementById("realnameview").innerHTML="真实姓名不能为空！";<br />    }else{<br />        document.getElementById("realnameview").innerHTML="√";<br />    }<br />  }<br />&lt;/script&gt;</p>
		<p>&lt;/head&gt;<br />&lt;body&gt;<br /> &lt;form name="RegistForm"&gt;<br /> &lt;table height="328" align="center" cellpadding="0" cellspacing="0" style="border:2px #666666 solid; "&gt;<br /> <br /> &lt;tr&gt;<br />  &lt;td colspan="2" height="30" bgcolor="#666666" align="center" style="border-bottom:1px #666666 solid;"&gt;&lt;font color="#FFFFFF"&gt;&lt;b&gt;用&amp;nbsp;户&amp;nbsp;注&amp;nbsp;册&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td width="147" height="35" align="right"&gt;用&amp;nbsp;户&amp;nbsp;名：&lt;/td&gt;<br />  &lt;td width="368"&gt;&lt;input type="text" name="UserName" id="username" maxlength="15" size="13" onblur="checkUsername(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;span id="usernameview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;密&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;码：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="password" name="Password" id="password1" maxlength="15" size="15" onblur="checkPassword(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;span id="pwdview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;密码校验：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="password" name="Password2" id="password2" maxlength="15" size="15" onblur="checkPassword2(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;span id="pwd2view"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;真实姓名：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="realname" id="realname" size="10" maxlength="10" onblur="checkRealName(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;span id="realnameview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;别：&lt;/td&gt;<br />  &lt;td&gt;&lt;select name="sex" id="sex"&gt;<br />  &lt;option value="m"&gt;男&lt;/option&gt;<br />  &lt;option value="w"&gt;女&lt;/option&gt;&lt;/select&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;联系电话：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="tel" id="tel" maxlength="12" size="13" &gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;手&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;机：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="mobile" id="mobile" maxlength="12" size="13"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;E - mail：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="email" id="email" size="25" onChange="checkEmail();"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="86" align="right"&gt;个人简介：&lt;/td&gt;<br />  &lt;td&gt;&lt;textarea cols="30" rows="4" class="text" name="memo" style="overflow:auto; border:1px #666666 solid; color:#3399FF;"&gt;&lt;/textarea&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="10" colspan="2"&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="30" colspan="2" align="center" style="border-top:1px #666666 solid; "&gt;&lt;input onClick="javascript:addUser();" style="background-color:#666666; color:#FFFFFF; border:0; text-align:center; width:60px;" type="button" name="add" value="A D D"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input style="background-color:#666666; color:#FFFFFF; border:0; width:60px;" type="reset" name="reset" value="R E T"&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> <br /> &lt;/table&gt;<br /> &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<p>
		</p>
		<hr />
		<p>/*<br /> * Generated by MyEclipse Struts<br /> * Template path: templates/java/JavaClass.vtl<br /> */<br />package com.rain.struts.action;</p>
		<p>import java.io.IOException;</p>
		<p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.actions.DispatchAction;<br />import org.apache.struts.validator.DynaValidatorForm;</p>
		<p>import com.rain.bean.Regist;</p>
		<p>/** <br /> * MyEclipse Struts<br /> * Creation date: 09-12-2006<br /> * <br /> * XDoclet definition:<br /> * @struts.action parameter="method" validate="true"<br /> */<br />public class LoginAction extends DispatchAction {<br /> </p>
		<p> /** <br />  * Method execute<br />  * @param mapping<br />  * @param form<br />  * @param request<br />  * @param response<br />  * @return ActionForward<br />  */<br /> public ActionForward checkUserName(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  Regist regist=new Regist();<br />  DynaValidatorForm loginForm = (DynaValidatorForm)form;<br />  String username=loginForm.getString("UserName");<br />  System.out.println(username);<br />  boolean flag=regist.findByName(username);<br />  System.out.println("test");<br />  if(flag)<br />  {<br />   try {<br />    response.getWriter().write("sorry!");<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />  }else<br />  {<br />   try {<br />    response.getWriter().write("luck!");<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />  }<br />     <br />  return null;<br /> }<br />}<br /></p>
		<hr />
<img src ="http://www.blogjava.net/rain1102/aggbug/69302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 09:29 <a href="http://www.blogjava.net/rain1102/articles/69302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate实现动态搜索</title><link>http://www.blogjava.net/rain1102/articles/69294.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69294.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69294.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69294.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69294.html</trackback:ping><description><![CDATA[
		<p>HTML源代码<br />&lt;%@ page language="java" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;article.html&lt;/title&gt;<br />  &lt;script type="text/javascript" src="js/common.js"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript"&gt;<br />  var completeDiv;<br />  var inputField;<br />  var nameTable;<br />  var nameTableBody;<br />  function initVars() {<br />     inputField = document.getElementById("title");            <br />     nameTable = document.getElementById("name_table");<br />     completeDiv = document.getElementById("popup");<br />     nameTableBody = document.getElementById("name_table_body");<br />     <br />  }<br /> <br />  function findNames(){<br />   initVars();<br />   if (inputField.value.length &gt; 0) {<br />       createXMLHttpRequest();  <br />       var url = "article.do?method=search&amp;title="+<font color="#ff1493">encodeURI</font>(inputField.value);   <br />       xmlHttp.open("GET", url, true);<br />       xmlHttp.onreadystatechange = callback;<br />       xmlHttp.send(null);<br />    } else {<br />       clearNames();<br />    }<br />  }<br />  function callback() {<br />            if (xmlHttp.readyState == 4) {<br />                if (xmlHttp.status == 200) {<br />                <br />                    var name = xmlHttp.responseXML.getElementsByTagName("title")[0].firstChild.data;<br />                    setNames(xmlHttp.responseXML.getElementsByTagName("title"));<br />                } else if (xmlHttp.status == 204){<br />                    clearNames();<br />                   <br />                }<br />            }<br />        }<br />        <br />        function setNames(the_names) {            <b