﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-木木-随笔分类-Hibernate学习</title><link>http://www.blogjava.net/ktoo/category/24713.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 17 Feb 2008 10:27:11 GMT</lastBuildDate><pubDate>Sun, 17 Feb 2008 10:27:11 GMT</pubDate><ttl>60</ttl><item><title>Struts2+Hibernate中关闭Session的filter问题</title><link>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sat, 16 Feb 2008 17:37:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/180226.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/180226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/180226.html</trackback:ping><description><![CDATA[<p>用Struts2+Hibernate开发Web程序<br />
发现网站老是一动不动,在DAO中用&nbsp; Statistics stats = HibernateUtil.getSessionFactory().getStatistics();<br />
查看了统计结果,发现打开50个Session只有20个关闭了.<br />
看结构也没有什么问题,我使用两个ThreadLocal 存放Session 和Transaction,再用一个Filter去关闭,各个配置表面上也是没有问题,可是做测试的时候才发现关闭Session的Filter根本就是没有运行,或是有时运行,有时不运行,<br />
仔细想了想,调整了一下sessionclosefilter和Struts2的filter的顺序如下,终于可以关闭了</p>
<p>&nbsp;&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;HibernateSessionCloseFiler&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;com.hitecin.struts2.filter.HibernateSessionClose&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.ActionContextCleanUp&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;HibernateSessionCloseFiler&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts-cleanup&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;<br />
</p>
<img src ="http://www.blogjava.net/ktoo/aggbug/180226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2008-02-17 01:37 <a href="http://www.blogjava.net/ktoo/archive/2008/02/17/180226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 出错</title><link>http://www.blogjava.net/ktoo/archive/2008/02/04/179250.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 03 Feb 2008 19:56:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2008/02/04/179250.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/179250.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2008/02/04/179250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/179250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/179250.html</trackback:ping><description><![CDATA[&nbsp;ERROR - AssertionFailure.&lt;init&gt;(22) | an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)<br />
org.hibernate.AssertionFailure: collection was processed twice by flush()<br />
&nbsp;at org.hibernate.engine.Collections.prepareCollectionForUpdate(Collections.java:202)<br />
&nbsp;at org.hibernate.engine.Collections.processReachableCollection(Collections.java:185)<br />
&nbsp;at org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:37)<br />
&nbsp;at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)<br />
&nbsp;at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:61)<br />
&nbsp;at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)<br />
&nbsp;at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:131)<br />
&nbsp;at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)<br />
&nbsp;at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)<br />
&nbsp;at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)<br />
&nbsp;at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)<br />
&nbsp;at com.hitecin.struts2.HibernateDAO.HibernateTemplate.run(HibernateTemplate.java:30)<br />
&nbsp;at com.hitecin.struts2.HibernateDAO.HibernateSupport.createQuery(HibernateSupport.java:140)<br />
&nbsp;at com.hitecin.struts2.productshow.ProductJspAction.execute(ProductJspAction.java:47)<br />
&nbsp;at sun.reflect.GeneratedMethodAccessor242.invoke(Unknown Source)<br />
&nbsp;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />
&nbsp;at java.lang.reflect.Method.invoke(Method.java:585)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)<br />
&nbsp;at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)<br />
&nbsp;at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)<br />
&nbsp;at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)<br />
&nbsp;at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)<br />
&nbsp;at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507)<br />
&nbsp;at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421)<br />
&nbsp;at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />
&nbsp;at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)<br />
&nbsp;at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)<br />
&nbsp;at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)<br />
&nbsp;at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)<br />
&nbsp;at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:420)<br />
&nbsp;at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)<br />
&nbsp;at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)<br />
&nbsp;at com.caucho.util.ThreadPool.run(ThreadPool.java:442)<br />
&nbsp;at java.lang.Thread.run(Thread.java:595)<br />
<br />
<br />
<br />
分析程序<br />
ProductBean 中有一Set&nbsp;&nbsp;&nbsp; priceSet,而我在同一个方法中有两次使用了"from ProductBean..."的Hql句子,<br />
虽然我使用了Lazy模式,可两次查询还是引用到了同一个ProductBean中的priceSet;<br />
改进:<br />
&nbsp;&nbsp; 其实我两次用的数据是不一要的,使用精细一点的查询就可以解决问题,如第一次使用"select p.name1,p.name2 from ProductBean&nbsp; as p&nbsp; ....",第二次用"select p.name1,p.name3 from ProdcutBean as p..."<br />
问题就解决了<br />
<img src ="http://www.blogjava.net/ktoo/aggbug/179250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2008-02-04 03:56 <a href="http://www.blogjava.net/ktoo/archive/2008/02/04/179250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate实例学习(一)</title><link>http://www.blogjava.net/ktoo/archive/2007/08/19/137993.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sun, 19 Aug 2007 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/19/137993.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/137993.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/19/137993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/137993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/137993.html</trackback:ping><description><![CDATA[<p>hsql db下载<a href="http://hsqldb.org/" target="_blank">http://hsqldb.org</a></p>
<p>解压zip文件，新建一个目标目录DataBase，把解压后文件中的data ,demo,lib目录拷到DataBase中,运行demo中的runServer.bat，可启动服务，运行runManager.bat可运行图形界面!数据库轻松搞定!执行下面SQL</p>
<div style="background-color: #cccccc;">
<p>CREATE TABLE EVENT<br>(EVENT_ID DOUBLE NOT NULL,<br>EVENT_DATE DATE,<br>TITLE VARCHAR(20)<br>)&nbsp;</p>
</div>
<p>新建工程Test,并创建子目录src ,lib ,bin<br>&nbsp;在src.events中写实体类Event.java</p>
<div style="background-color: #cccccc;">
<p>package events;<br>import java.util.Date;<br>public class Event<br>{<br>&nbsp;&nbsp;&nbsp; private Long id;<br>&nbsp;&nbsp;&nbsp; private String title;<br>&nbsp;&nbsp;&nbsp; private Date date;<br>&nbsp;&nbsp;&nbsp; public Event(){};<br>&nbsp;&nbsp;&nbsp; public Long getId()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return id;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setId(Long id)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; this.id=id;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public Date getDate()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return date;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setDate(Date date)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.date=date;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public String getTitle()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return title;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setTitle(String title)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.title=title;<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
</div>
<p>在类同一目录下写映射文件Event.hbm.xml</p>
<div style="background-color: #cccccc;">
<p>&lt;?xml version="1.0"?&gt;<br>&lt;!DOCTYPE hibernate-mapping PUBLIC<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd%22">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"</a>&gt;<br>&lt;hibernate-mapping&gt;<br>&lt;class name="events.Event" table="EVENT"&gt;<br>&nbsp;&nbsp; &lt;id name="id" column="EVENT_ID"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class="native"/&gt;<br>&nbsp;&nbsp; &lt;/id&gt;<br>&nbsp;&nbsp; &lt;property name="date" type="timestamp" column="EVENT_DATE"/&gt;<br>&nbsp;&nbsp; &lt;property name="title"/&gt;<br>&lt;/class&gt;<br>&lt;/hibernate-mapping&gt;  </p>
<p><br>&nbsp;</p>
</div>
<p>在Test根目录下写配置文件 Hibernate.hbm.xml</p>
<div style="background-color: #cccccc;">
<p>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br>&lt;!DOCTYPE hibernate-configuration PUBLIC<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd%22">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"</a>&gt; </p>
<p>&lt;hibernate-configuration&gt;<br>&nbsp; &lt;session-factory&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="connection.driver_class"&gt;org.hsqldb.jdbcDriver&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="connection.url"&gt;jdbc:hsqldb:hsql://localhost&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="connection.username"&gt;sa&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="connection.password"&gt;&lt;/property&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="connection.pool_size"&gt;1&lt;/property&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="dialect"&gt;org.hibernate.dialect.HSQLDialect&lt;/property&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="current_session_context_class"&gt;thread&lt;/property&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;property name="hbm2ddl.auto"&gt;create&lt;/property&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;mapping resource="events/Event.hbm.xml"/&gt;<br>&nbsp; &lt;/session-factory&gt;<br>&lt;/hibernate-configuration&gt;</p>
</div>
<p>&nbsp;测试在src.util写HibernateUtil.java和在src.events中EventManager.java</p>
<div style="background-color: #cccccc;">
<p>package util;<br>import org.hibernate.*;<br>import org.hibernate.cfg.*;<br>public class HibernateUtil<br>{<br>&nbsp;&nbsp;&nbsp; private static final SessionFactory sessionFactory;<br>&nbsp;&nbsp;&nbsp; static <br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionFactory=new Configuration().configure().buildSessionFactory();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public static SessionFactory getSessionFactory()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sessionFactory;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}  </p>
<p>&nbsp;</p>
<p>package events;<br>import org.hibernate.Session;<br>import java.util.Date;  </p>
<p>import util.HibernateUtil;<br>public class EventManager<br>{<br>&nbsp;&nbsp;&nbsp; public static void main(String [] args)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EventManager mgr=new EventManager();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("MEHTOD BEFORE ");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mgr.createAndStoreEvent("MyEvnet",new Date());<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; private void createAndStoreEvent(String title,Date theDate)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Session session=HibernateUtil.getSessionFactory().getCurrentSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("AFTER1");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.beginTransaction();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(session==null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("session==NULL");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Event theEvent=new Event();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theEvent.setTitle(title);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; theEvent.setDate(theDate);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.save(theEvent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.getTransaction().commit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("AFTER2");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HibernateUtil.getSessionFactory().close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("AFTER");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //e.printStack();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("EEE"+e.toString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>};</p>
</div>
<p>OK</p>
<p>再用Ant构建</p>
<div style="background-color: #cccccc;">
<p>&lt;?xml version="1.0" ?&gt; <br>&lt;project name="hibernate-tutorial" default="compile"&gt;<br>&nbsp;&nbsp; &lt;property name="sourcedir" value="${basedir}/src"/&gt;<br>&nbsp;&nbsp; &lt;property name="targetdir" value="${basedir}/bin"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;property name="librarydir" value="${basedir}/lib"/&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;path id="libraries"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${librarydir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.jar"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/path&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;target name="clean"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete dir="${targetdir}"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${targetdir}"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;target name="compile" depends="clean,copy-resources,copyxml"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;javac srcdir="${sourcedir}" destdir="${targetdir}"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; classpathref="libraries"&nbsp; /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;  </p>
<p>&nbsp;&nbsp;&nbsp; &lt;target name="copy-resources"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir="${targetdir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${sourcedir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exclude name="**/*.java"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/copy&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="run" depends="compile"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;java fork="true" classname="events.EventManager" classpathref="libraries"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;classpath path="${targetdir}"/&gt;<br>&nbsp;&lt;/java&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br>&nbsp;&nbsp;&nbsp; &lt;target name="copyxml"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;copy todir="${targetdir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fileset dir="${basedir}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name="*.xml"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/copy&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/target&gt;<br>&lt;/project&gt;</p>
</div>
<p>&nbsp; 把Hibernate3所需jar包和hsql.jar放入lib目录。</p><img src ="http://www.blogjava.net/ktoo/aggbug/137993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-19 22:41 <a href="http://www.blogjava.net/ktoo/archive/2007/08/19/137993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate基础学习</title><link>http://www.blogjava.net/ktoo/archive/2007/08/18/137818.html</link><dc:creator>KTOO</dc:creator><author>KTOO</author><pubDate>Sat, 18 Aug 2007 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/ktoo/archive/2007/08/18/137818.html</guid><wfw:comment>http://www.blogjava.net/ktoo/comments/137818.html</wfw:comment><comments>http://www.blogjava.net/ktoo/archive/2007/08/18/137818.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ktoo/comments/commentRss/137818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ktoo/services/trackbacks/137818.html</trackback:ping><description><![CDATA[
<div style="BACKGROUND-COLOR: #00b2bf">一些基本原则</div>
<p>1.所有的持久化实体(persistent entity)类都应该需要一个标识符属性(identifier),以便使用Hibernate提供的所有特性,一般来说我们也不会操纵标识符,所以它的setter方法应设为private 或protected</p>
<p>2.所有持久化类都要求有无参数的构造器,因为Hibernate必须使用java反射机制来为我们创建对象,构造器的访问级别可以是private</p>
<p><br/></p>
<img src ="http://www.blogjava.net/ktoo/aggbug/137818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ktoo/" target="_blank">KTOO</a> 2007-08-18 15:18 <a href="http://www.blogjava.net/ktoo/archive/2007/08/18/137818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>