<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marshal&#039;s Blog &#187; hibernate</title>
	<atom:link href="http://marshal.easymorse.com/archives/tag/hibernate/feed" rel="self" type="application/rss+xml" />
	<link>http://marshal.easymorse.com</link>
	<description>It&#039;s swap of marshal&#039;s memory.</description>
	<lastBuildDate>Mon, 30 Jan 2012 07:03:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>查找被关联对象</title>
		<link>http://marshal.easymorse.com/archives/4510?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e6%259f%25a5%25e6%2589%25be%25e8%25a2%25ab%25e5%2585%25b3%25e8%2581%2594%25e5%25af%25b9%25e8%25b1%25a1</link>
		<comments>http://marshal.easymorse.com/archives/4510#comments</comments>
		<pubDate>Tue, 12 Jul 2011 11:39:55 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[grails gorm]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[hibernate hql]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/4510</guid>
		<description><![CDATA[在Grails实现复杂的数据录入示例中，如果删除一个图书对象，而这个对象是另一个或多个对象的相关图书。这时就会报错。 当然，我们可以根据这个异常来提示客户，不能删除，虽然这不是个好方法。但是客户需要知道它到底被哪几个对象关联了。 可以使用hql的join子句实现这样的功能。 这里再把Book实体代码列出来： class Book { &#160;&#160;&#160; static mapping = { &#160;&#160;&#160;&#160;&#160;&#160;&#160; //id generator:&#8217;uuid.hex&#8217;, params:[separator:'-'] &#160;&#160;&#160;&#160;&#160;&#160;&#160; //relativeBooks cascade:&#34;delete&#34; &#160;&#160;&#160; } &#160;&#160;&#160; &#160;&#160;&#160; static hasMany=[relativeBooks:Book] &#160;&#160;&#160; &#160;&#160;&#160; //String id &#160;&#160;&#160; String name &#160;&#160;&#160; List&#60;Book&#62; relativeBooks=[] } &#160; 编写一个测试代码，其中包含了实现这个需求的hql代码： def test={ &#160;&#160;&#160; def b1=new Book(name:&#34;b1&#34;) &#160;&#160;&#160; def b2=new Book(name:&#34;b2&#34;) &#160;&#160;&#160; def b3=new Book(name:&#34;b3&#34;) &#160;&#160;&#160; b1.relativeBooks.add(b2) &#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://marshal.easymorse.com/archives/4470" title="Grails实现复杂的数据录入">Grails实现复杂的数据录入</a>示例中，如果删除一个图书对象，而这个对象是另一个或多个对象的相关图书。这时就会报错。</p>
<p>当然，我们可以根据这个异常来提示客户，不能删除，虽然这不是个好方法。但是客户需要知道它到底被哪几个对象关联了。</p>
<p>可以使用hql的join子句实现这样的功能。</p>
<p>这里再把Book实体代码列出来：</p>
<blockquote><p>class Book {     <br />&#160;&#160;&#160; static mapping = {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //id generator:&#8217;uuid.hex&#8217;, params:[separator:'-']      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //relativeBooks cascade:&quot;delete&quot;      <br />&#160;&#160;&#160; }      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; static hasMany=[relativeBooks:Book]      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; //String id      <br />&#160;&#160;&#160; String name      <br />&#160;&#160;&#160; List&lt;Book&gt; relativeBooks=[]      <br />}</p>
<p>&#160;</p>
</blockquote>
<p><span id="more-4510"></span>
<p>编写一个测试代码，其中包含了实现这个需求的hql代码：</p>
<blockquote><p>def test={     <br />&#160;&#160;&#160; def b1=new Book(name:&quot;b1&quot;)      <br />&#160;&#160;&#160; def b2=new Book(name:&quot;b2&quot;)      <br />&#160;&#160;&#160; def b3=new Book(name:&quot;b3&quot;)      <br />&#160;&#160;&#160; b1.relativeBooks.add(b2)      <br />&#160;&#160;&#160; b1.save()      <br />&#160;&#160;&#160; b3.relativeBooks.add(b2)      <br />&#160;&#160;&#160; b3.save(flush:true)      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; println &quot;&quot;&quot;b2.id: ${b2.id}&quot;&quot;&quot;      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; def hql=&quot;&quot;&quot;select b from Book b left join b.relativeBooks r where r.id=&#8217;${b2.id}&#8217;&quot;&quot;&quot;      <br />&#160;&#160;&#160; println hql      <br />&#160;&#160;&#160; def results=Book.executeQuery(hql)      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; println &quot;&quot;&quot;results: ${results}&quot;&quot;&quot;      <br />}</p>
<p>&#160;</p>
</blockquote>
<p><font style="background-color: #f4f4f4">输出的结果类似这样：</font></p>
<blockquote><p>b2.id: 166     <br />select b from Book b left join b.relativeBooks r where r.id=&#8217;166&#8242;      <br />results: [bookproto.Book : 165, bookproto.Book : 167]</p>
<p>&#160;</p>
</blockquote>
<p><font style="background-color: #f4f4f4">b1和b3按照自增列，即是165和167，结果正确。</font></p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/4510/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails实现实体自身多对多的变通方案</title>
		<link>http://marshal.easymorse.com/archives/4438?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=grails%25e5%25ae%259e%25e7%258e%25b0%25e5%25ae%259e%25e4%25bd%2593%25e8%2587%25aa%25e8%25ba%25ab%25e5%25a4%259a%25e5%25af%25b9%25e5%25a4%259a%25e7%259a%2584%25e5%258f%2598%25e9%2580%259a%25e6%2596%25b9%25e6%25a1%2588</link>
		<comments>http://marshal.easymorse.com/archives/4438#comments</comments>
		<pubDate>Fri, 08 Jul 2011 02:07:47 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[grails gorm]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/4438</guid>
		<description><![CDATA[Grails中的GORM，是自动的对象关系映射api。封装了Hibernate，功能应该是Hibernate的子集，不过借助强大的groovy语言使用起来更方便。 项目中需要实现实体自身多对多的关系。图书和相关图书。 一本书，有0到多个相关图书。一本书，还可能被0到多个图书相关。这里要注意啦，这两个集合不是重合的。即，a图书的相关图书有b，但b不一定相关图书有a。这也好比，你的朋友中，有人未必拿你当朋友，呵呵。 对于Java类Book，就要求有两个集合成员： List relativeBooks; List relatedBooks; &#160; 这在Hibernate中是可以通过配置实现的。但是在Grails中，未能找到相关配置。如果按照标准写法，需要有belongsTo，因为两端都是Book，是不能实现上述的关系定义的。 因此考虑了变通的办法，通过引入另外的实体，图书关系，来变通实现需求。即： 图书和图书关系实体是1对1关系 图书关系实体和图书有相关关系，是1对多 实现的代码，图书： class Book { &#160;&#160;&#160; static constraints = { &#160;&#160;&#160;&#160;&#160;&#160;&#160; bookRelation(nullable:true) &#160;&#160;&#160; } &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160;&#160;&#160; String name &#160;&#160;&#160; BookRelation bookRelation } 图书关系： class BookRelation { &#160;&#160;&#160; static constraints = { &#160;&#160;&#160; } &#160;&#160;&#160; &#160;&#160;&#160; static hasMany=[books:Book] &#160;&#160;&#160; static belongsTo=[book:Book] &#160;&#160;&#160; &#160;&#160;&#160; SortedSet [...]]]></description>
			<content:encoded><![CDATA[<p>Grails中的GORM，是自动的对象关系映射api。封装了Hibernate，功能应该是Hibernate的子集，不过借助强大的groovy语言使用起来更方便。</p>
<p>项目中需要实现实体自身多对多的关系。图书和相关图书。</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2011/07/image3.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 8px 0px 4px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2011/07/image_thumb3.png" width="284" height="210" /></a></p>
<p>一本书，有0到多个相关图书。一本书，还可能被0到多个图书相关。这里要注意啦，这两个集合不是重合的。即，a图书的相关图书有b，但b不一定相关图书有a。这也好比，你的朋友中，有人未必拿你当朋友，呵呵。</p>
<p><span id="more-4438"></span>
<p>对于Java类Book，就要求有两个集合成员：</p>
<blockquote><p>List relativeBooks;     <br />List relatedBooks;</p>
<p>&#160;</p>
</blockquote>
<p>这在Hibernate中是可以通过配置实现的。但是在Grails中，未能找到相关配置。如果按照标准写法，需要有belongsTo，因为两端都是Book，是不能实现上述的关系定义的。</p>
<p>因此考虑了变通的办法，通过引入另外的实体，图书关系，来变通实现需求。即：</p>
<ul>
<li>图书和图书关系实体是1对1关系</li>
<li>图书关系实体和图书有相关关系，是1对多</li>
</ul>
<p>实现的代码，图书：</p>
<blockquote><p>class Book {</p>
<p>&#160;&#160;&#160; static constraints = {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; bookRelation(nullable:true)      <br />&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160; String name      <br />&#160;&#160;&#160; BookRelation bookRelation      <br />}</p>
</blockquote>
<p>图书关系：</p>
<blockquote><p>class BookRelation {</p>
<p>&#160;&#160;&#160; static constraints = {     <br />&#160;&#160;&#160; }      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; static hasMany=[books:Book]      <br />&#160;&#160;&#160; static belongsTo=[book:Book]      <br />&#160;&#160;&#160; <br />&#160;&#160;&#160; SortedSet books=new TreeSet()      <br />}</p>
<p>&#160;</p>
</blockquote>
<p>这里需要说明2点：</p>
<ul>
<li>bookRelation(nullable:true)：有的图书没有相关图书，这里要允许为空</li>
<li>SortedSet books=new TreeSet()：Grails默认集合为Set，但Set是无序的，强制定义类型使集合有序</li>
</ul>
<p>使用实体的测试代码：</p>
<blockquote><p>def b1=new Book(name:&quot;中国农业史&quot;)     <br />b1.save()</p>
<p>println &quot;b1.id:&quot;+b1.id</p>
<p>book=new Book(name:&quot;中国史学史&quot;)</p>
<p>def bookRelation=new BookRelation(book:book)     <br />bookRelation.books.add(b1)      <br />book.bookRelation=bookRelation</p>
<p>if(book.save()){     <br />&#160;&#160;&#160; println &quot;&gt;&gt;saved.&quot;      <br />}</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/4438/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gilead是什么？</title>
		<link>http://marshal.easymorse.com/archives/2640?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gilead%25e6%2598%25af%25e4%25bb%2580%25e4%25b9%2588%25ef%25bc%259f</link>
		<comments>http://marshal.easymorse.com/archives/2640#comments</comments>
		<pubDate>Wed, 21 Apr 2010 09:17:17 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[gilead]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[gwt rpc]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/2640</guid>
		<description><![CDATA[gilead是什么 gilead是个java api，用于将hibernate对象的clone和merge。网址是： http://noon.gilead.free.fr/gilead/ 官方网站的说明是： Gilead让你无痛苦的传递持久对象到JVM外，比如GWT, Web-Services, Flex和Google AppEngine等。 这个图比较说明问题，你可以把java server这端的对象树看作hibernate生成的持久对象。灰色的节点表示延时加载的对象。经过桔黄色的gilead工具，可以克隆（clone）成延时加载对象赋值为null的对象图，这样再传递到比如gwt rpc，就不会出现LazyInitialisationException了。 如何使用gilead 使用gilead，需要导入一些类库，gilead支持maven，而且有自己的repository，需要加入它的repository： &#60;repository&#62; &#160;&#160;&#160; &#60;id&#62;gilead-release&#60;/id&#62; &#160;&#160;&#160; &#60;name&#62;Gilead Repository&#60;/name&#62; &#160;&#160;&#160; &#60;url&#62;https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-repo&#60;/url&#62; &#60;/repository&#62; &#60;repository&#62; &#160;&#160;&#160; &#60;id&#62;gilead-snapshot&#60;/id&#62; &#160;&#160;&#160; &#60;name&#62;Gilead snapshot&#60;/name&#62; &#160;&#160;&#160; &#60;url&#62;https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-snapshots-repo&#60;/url&#62; &#60;/repository&#62; &#160; 然后，加入依赖声明： &#60;dependency&#62; &#160;&#160;&#160; &#60;groupId&#62;net.sf.gilead&#60;/groupId&#62; &#160;&#160;&#160; &#60;artifactId&#62;gilead4gwt&#60;/artifactId&#62; &#160;&#160;&#160; &#60;version&#62;1.3.1&#60;/version&#62; &#160;&#160;&#160; &#60;exclusions&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;exclusion&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;groupId&#62;org.springframework&#60;/groupId&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;artifactId&#62;spring&#60;/artifactId&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;/exclusion&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;exclusion&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;groupId&#62;org.hibernate&#60;/groupId&#62; [...]]]></description>
			<content:encoded><![CDATA[<h4>gilead是什么</h4>
<p>gilead是个java api，用于将hibernate对象的clone和merge。网址是：</p>
<blockquote><p><a title="http://noon.gilead.free.fr/gilead/" href="http://noon.gilead.free.fr/gilead/">http://noon.gilead.free.fr/gilead/</a></p>
</blockquote>
<p>官方网站的说明是：</p>
<blockquote><p><font style="background-color: #ffffff">Gilead让你无痛苦的传递持久对象到JVM外，比如GWT, Web-Services, Flex和Google AppEngine等。</font></p>
</blockquote>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2010/04/Clone_And_Merge.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Clone_And_Merge" border="0" alt="Clone_And_Merge" src="http://marshal.easymorse.com/wp-content/uploads/2010/04/Clone_And_Merge_thumb.jpg" width="456" height="233" /></a> </p>
<p>这个图比较说明问题，你可以把java server这端的对象树看作hibernate生成的持久对象。灰色的节点表示延时加载的对象。经过桔黄色的gilead工具，可以克隆（clone）成延时加载对象赋值为null的对象图，这样再传递到比如gwt rpc，就不会出现LazyInitialisationException了。</p>
<p> <span id="more-2640"></span><br />
<h4>如何使用gilead</h4>
<p>使用gilead，需要导入一些类库，gilead支持maven，而且有自己的repository，需要加入它的repository：</p>
<blockquote><p>&lt;repository&gt;      <br />&#160;&#160;&#160; &lt;id&gt;gilead-release&lt;/id&gt;       <br />&#160;&#160;&#160; &lt;name&gt;Gilead Repository&lt;/name&gt;       <br />&#160;&#160;&#160; &lt;url&gt;<a href="https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-repo">https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-repo</a>&lt;/url&gt;       <br />&lt;/repository&gt;       <br />&lt;repository&gt;       <br />&#160;&#160;&#160; &lt;id&gt;gilead-snapshot&lt;/id&gt;       <br />&#160;&#160;&#160; &lt;name&gt;Gilead snapshot&lt;/name&gt;       <br />&#160;&#160;&#160; &lt;url&gt;<a href="https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-snapshots-repo">https://gilead.svn.sourceforge.net/svnroot/gilead/gilead/maven-snapshots-repo</a>&lt;/url&gt;       <br />&lt;/repository&gt;</p>
<p>&#160;</p>
</blockquote>
<p>然后，加入依赖声明：</p>
<blockquote><p>&lt;dependency&gt;      <br />&#160;&#160;&#160; &lt;groupId&gt;net.sf.gilead&lt;/groupId&gt;       <br />&#160;&#160;&#160; &lt;artifactId&gt;gilead4gwt&lt;/artifactId&gt;       <br />&#160;&#160;&#160; &lt;version&gt;1.3.1&lt;/version&gt;       <br />&#160;&#160;&#160; &lt;exclusions&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;exclusion&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;groupId&gt;org.springframework&lt;/groupId&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;artifactId&gt;spring&lt;/artifactId&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/exclusion&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;exclusion&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;groupId&gt;org.hibernate&lt;/groupId&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;artifactId&gt;hibernate&lt;/artifactId&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/exclusion&gt;       <br />&#160;&#160;&#160; &lt;/exclusions&gt;       <br />&lt;/dependency&gt;</p>
<p>&#160;</p>
</blockquote>
<p>这里要注意exclusion，否则，会加入hibernate 3.2版本，spring版本也不高。</p>
<p>另外需要注意，在maven下载依赖类库的时候，有大量的jboss类库，因为不影响我使用，所以没有做exclusion。不过我怀疑，是否都用得到。</p>
<p>以下文中示例是通过<a href="http://marshal.easymorse.com/archives/2637" title="gwt通过RPC方式使用hibernate">gwt通过RPC方式使用hibernate</a>改的，将直接使用hibernate的项目代码增加gilead的使用。</p>
<p>首先，需要设置GWT导入gilead模块，在gwt.xml文件中加入：</p>
<blockquote><p>&lt;inherits name=&#8217;net.sf.gilead.Gilead4Gwt&#8217;/&gt;</p>
</blockquote>
<p>将原来服务器端实现类：</p>
<blockquote><p>public class GreetingServiceImpl extends <em><strong>RemoteServiceServlet</strong></em> implements       <br />GreetingService {</p>
</blockquote>
<p>继承关系改为：</p>
<blockquote><p>public class GreetingServiceImpl extends <em><strong>PersistentRemoteService</strong></em> implements       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; GreetingService {</p>
<p>&#160;</p>
</blockquote>
<p>然后，注意在构造方法中：</p>
<blockquote><p>public GreetingServiceImpl() {      <br />&#160;&#160;&#160; HibernateUtil hibernateUtil = new HibernateUtil(MyHibernateUtil       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getSessionFactory());       <br />&#160;&#160;&#160; PersistentBeanManager persistentBeanManager = GwtConfigurationHelper       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .initGwtStatelessBeanManager(hibernateUtil);       <br />&#160;&#160;&#160; setBeanManager(persistentBeanManager);       <br />}</p>
<p>&#160;</p>
</blockquote>
<p>实际上，就是设置出一个BeanManager，这是做cloone和merge持久对象的工具类。</p>
<p>使用上比较简单：</p>
<blockquote><p>@Override      <br />public User helloUser(String userName) {       <br />&#160;&#160;&#160; User user = new User();       <br />&#160;&#160;&#160; user.setName(userName);       <br />&#160;&#160;&#160; Session session = MyHibernateUtil.getSessionFactory()       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getCurrentSession();       <br />&#160;&#160;&#160; session.beginTransaction();       <br />&#160;&#160;&#160; session.save(user);       <br />&#160;&#160;&#160; session.getTransaction().commit();       <br />&#160;&#160;&#160; return (User) this.getBeanManager().clone(user);       <br />}</p>
<p>&#160;</p>
</blockquote>
<p>可以看到，它不影响使用hibernate的行为，只是需要将持久对象传出jvm的时候（GWT RPC），用BeanManager的clone方法，做一次克隆。这样传出的对象就不会有延时加载方面的异常了。</p>
<p>见源代码：</p>
<blockquote><p><a href="http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.3">http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.3</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/2640/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gwt通过RPC方式使用hibernate</title>
		<link>http://marshal.easymorse.com/archives/2637?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gwt%25e9%2580%259a%25e8%25bf%2587rpc%25e6%2596%25b9%25e5%25bc%258f%25e4%25bd%25bf%25e7%2594%25a8hibernate</link>
		<comments>http://marshal.easymorse.com/archives/2637#comments</comments>
		<pubDate>Wed, 21 Apr 2010 03:55:22 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/2637</guid>
		<description><![CDATA[以前，使用gwt开发企业应用系统。多人一起工作。采用的是json作为服务器端和gwt浏览器端通信。 主要考虑的是，hibernate管理的实体对象，在脱离JVM可能会有一些问题，比如lazy loading等。 现在开发的是服务器端的小应用程序，需要简化开发技术，提供生产效率。计划取消掉spring，服务器端直接使用hibernate。 用最新的hibernate 3.5.1-final版本写了个简单的代码。 在gwt的start project基础上改的，输入一个用户名，在服务器端，通过hibernate保存User对象到数据库。user对象有两个属性，id和name。 可以看到返回了id字符串，是个uuid字符串。说明服务器端已经插入成功了。 代码见： http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.2/ 另外，还有个版本： http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.1/ 是未使用hibernate的版本。]]></description>
			<content:encoded><![CDATA[<p>以前，使用gwt开发企业应用系统。多人一起工作。采用的是json作为服务器端和gwt浏览器端通信。</p>
<p>主要考虑的是，hibernate管理的实体对象，在脱离JVM可能会有一些问题，比如lazy loading等。</p>
<p>现在开发的是服务器端的小应用程序，需要简化开发技术，提供生产效率。计划取消掉spring，服务器端直接使用hibernate。</p>
<p>用最新的hibernate 3.5.1-final版本写了个简单的代码。</p>
<p><a href="http://marshal.easymorse.com/wp-content/uploads/2010/04/image75.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://marshal.easymorse.com/wp-content/uploads/2010/04/image_thumb74.png" width="244" height="195" /></a> </p>
<p> <span id="more-2637"></span>
<p>在gwt的start project基础上改的，输入一个用户名，在服务器端，通过hibernate保存User对象到数据库。user对象有两个属性，id和name。</p>
<p>可以看到返回了id字符串，是个uuid字符串。说明服务器端已经插入成功了。</p>
<p>代码见：</p>
<blockquote><p><a href="http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.2/">http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.2/</a></p>
</blockquote>
<p>另外，还有个版本：</p>
<blockquote><p><a href="http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.1/">http://easymorse.googlecode.com/svn/tags/gwt.rpc.demo-0.1/</a></p>
</blockquote>
<p>是未使用hibernate的版本。</p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/2637/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>还是升级到hibernate3.3.1GA的问题</title>
		<link>http://marshal.easymorse.com/archives/1351?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25bf%2598%25e6%2598%25af%25e5%258d%2587%25e7%25ba%25a7%25e5%2588%25b0hibernate331ga%25e7%259a%2584%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://marshal.easymorse.com/archives/1351#comments</comments>
		<pubDate>Tue, 19 May 2009 02:40:23 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[slf4j]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1351</guid>
		<description><![CDATA[上次升级hibernate3.3.1ga发现问题，并且解决了。见升级hibernate版本到3.3.1.GA。昨天在做测试的时候又发现问题。开发和测试阶段，直接设置了hibernate的show_sql属性为true，在控制台打印sql信息。部署到服务器上，需要改为写入日志文件。以前使用log4j的配置是： log4j.logger.org.hibernate.SQL=INFO 很意外的是，SQL日志一直打印不出来。而且是所有hibernate的日志都无法打印出来。原因是使用log4j的包不是和slf4j配合使用的。需要更改maven的pom.xml文件： &#60;dependency&#62; &#60;groupId&#62;org.slf4j&#60;/groupId&#62; &#60;artifactId&#62;slf4j-log4j12&#60;/artifactId&#62; &#60;version&#62;1.5.6&#60;/version&#62; &#60;/dependency&#62; 问题解决。]]></description>
			<content:encoded><![CDATA[<p>上次升级hibernate3.3.1ga发现问题，并且解决了。见<a href="http://marshal.easymorse.com/archives/1249" title="升级hibernate版本到3.3.1.GA">升级hibernate版本到3.3.1.GA</a>。昨天在做测试的时候又发现问题。开发和测试阶段，直接设置了hibernate的show_sql属性为true，在控制台打印sql信息。部署到服务器上，需要改为写入日志文件。以前使用log4j的配置是：</p>
<blockquote><p>log4j.logger.org.hibernate.SQL=<font color="#333333">INFO</font></p>
</blockquote>
<p><span id="more-1351"></span>
<p><font color="#333333">很意外的是，SQL日志一直打印不出来。而且是所有hibernate的日志都无法打印出来。原因是使用log4j的包不是和slf4j配合使用的。需要更改maven的pom.xml文件：</font></p>
<p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:0d940c8b-55f0-48cc-a626-9622e431e192" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #000000;">        </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
            </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">org.slf4j</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
            </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">slf4j-log4j12</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
            </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1.5.6</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
        </span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span></div>
</pre>
</div>
<p>问题解决。</p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1351/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>maven项目支持hibernate多数据库配置参数的方案</title>
		<link>http://marshal.easymorse.com/archives/1209?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven%25e9%25a1%25b9%25e7%259b%25ae%25e6%2594%25af%25e6%258c%2581hibernate%25e5%25a4%259a%25e6%2595%25b0%25e6%258d%25ae%25e5%25ba%2593%25e9%2585%258d%25e7%25bd%25ae%25e5%258f%2582%25e6%2595%25b0%25e7%259a%2584%25e6%2596%25b9%25e6%25a1%2588</link>
		<comments>http://marshal.easymorse.com/archives/1209#comments</comments>
		<pubDate>Sun, 01 Mar 2009 04:56:32 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1209</guid>
		<description><![CDATA[maven项目支持多数据库驱动的方案可以实现驱动的切换，但是比如url等jdbc参数，还需要自己手写。maven可以进一步自动化这个过程。同时不影响团队共用的项目文档。因为数据库url等参数只和开发者本地环境相关，团队中的多个开发者不能共享这些配置。所以这些配置内容应该放置在maven的用户settings.xml文件中。 比如，在settings.xml中设置的本地mysql配置： &#60;profiles&#62; &#160;&#160;&#160; &#60;profile&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;id&#62;mysql&#60;/id&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;properties&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;jdbc.url&#62;&#60;![CDATA[jdbc:mysql://localhost/mydb?createDatabaseIfNotExist=true&#38;amp;useUnicode=true&#38;amp;characterEncoding=utf-8]]&#62;&#60;/jdbc.url&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;jdbc.username&#62;root&#60;/jdbc.username&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;jdbc.password&#62;&#60;/jdbc.password&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;/properties&#62; &#160;&#160;&#160; &#60;/profile&#62; 在项目中hibernate的全局配置文件hibernate.cfg.xml中使用属性占位符： &#60;hibernate-configuration&#62; &#160;&#160;&#160; &#60;session-factory&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;property name=&#34;dialect&#34;&#62;${hibernate.dialect}&#60;/property&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;property name=&#34;connection.url&#34;&#62;${jdbc.url}&#60;/property&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;property name=&#34;connection.username&#34;&#62;${jdbc.username}&#60;/property&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;property name=&#34;connection.password&#34;&#62;${jdbc.password}&#60;/property&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;property name=&#34;connection.driver_class&#34;&#62;${jdbc.driverClassName}&#60;/property&#62; 另外，maven提供了过滤器（Filter），可在编译时将maven属性替代占位符。pom.xml中过滤器的配置（这里要求所有配置文件都应该放置在src/resources目录下）： &#160;&#160;&#160; &#60;resources&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;resource&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;directory&#62;src/main/resources&#60;/directory&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;filtering&#62;true&#60;/filtering&#62; &#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;/resource&#62; &#160;&#160;&#160; &#60;/resources&#62; &#60;/build&#62; 在我本人的环境中，一般使用derby或者h2database这样的嵌入数据库做单元测试，所以将之设置为默认属性： &#60;properties&#62; &#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://marshal.easymorse.com/archives/1207" title="maven项目支持多数据库驱动的方案">maven项目支持多数据库驱动的方案</a>可以实现驱动的切换，但是比如url等jdbc参数，还需要自己手写。maven可以进一步自动化这个过程。同时不影响团队共用的项目文档。因为数据库url等参数只和开发者本地环境相关，团队中的多个开发者不能共享这些配置。所以这些配置内容应该放置在maven的用户settings.xml文件中。</p>
<p> <span id="more-1209"></span>
<p>比如，在settings.xml中设置的本地mysql配置：</p>
<blockquote><p>&lt;profiles&gt;     <br />&#160;&#160;&#160; &lt;profile&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;id&gt;mysql&lt;/id&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;properties&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;jdbc.url&gt;&lt;![CDATA[jdbc:mysql://localhost/mydb?createDatabaseIfNotExist=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8]]&gt;&lt;/jdbc.url&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;jdbc.username&gt;root&lt;/jdbc.username&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;jdbc.password&gt;&lt;/jdbc.password&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/properties&gt;      <br />&#160;&#160;&#160; &lt;/profile&gt;</p>
</blockquote>
<p>在项目中hibernate的全局配置文件hibernate.cfg.xml中使用属性占位符：</p>
<blockquote><p>&lt;hibernate-configuration&gt;      <br />&#160;&#160;&#160; &lt;session-factory&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name=&quot;dialect&quot;&gt;${hibernate.dialect}&lt;/property&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name=&quot;connection.url&quot;&gt;${jdbc.url}&lt;/property&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name=&quot;connection.username&quot;&gt;${jdbc.username}&lt;/property&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name=&quot;connection.password&quot;&gt;${jdbc.password}&lt;/property&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;property name=&quot;connection.driver_class&quot;&gt;${jdbc.driverClassName}&lt;/property&gt;</p>
</blockquote>
<p>另外，maven提供了过滤器（Filter），可在编译时将maven属性替代占位符。pom.xml中过滤器的配置（这里要求所有配置文件都应该放置在src/resources目录下）：</p>
<blockquote><p>&#160;&#160;&#160; &lt;resources&gt;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;resource&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;directory&gt;src/main/resources&lt;/directory&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;filtering&gt;true&lt;/filtering&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/resource&gt;       <br />&#160;&#160;&#160; &lt;/resources&gt;       <br />&lt;/build&gt;</p>
</blockquote>
<p>在我本人的环境中，一般使用derby或者h2database这样的嵌入数据库做单元测试，所以将之设置为默认属性：</p>
<blockquote><p>&lt;properties&gt;      <br />&#160;&#160;&#160; &lt;hibernate.dialect&gt;org.hibernate.dialect.DerbyDialect&lt;/hibernate.dialect&gt;       <br />&#160;&#160;&#160; &lt;jdbc.grougId&gt;org.apache.derby&lt;/jdbc.grougId&gt;       <br />&#160;&#160;&#160; &lt;jdbc.artifactId&gt;derby&lt;/jdbc.artifactId&gt;       <br />&#160;&#160;&#160; &lt;jdbc.version&gt;10.3.1.4&lt;/jdbc.version&gt;       <br />&#160;&#160;&#160; &lt;jdbc.driverClassName&gt;org.apache.derby.jdbc.EmbeddedDriver&lt;/jdbc.driverClassName&gt;       <br />&#160;&#160;&#160; &lt;jdbc.url&gt;&lt;![CDATA[jdbc:derby:target/database/helloworld;create=true]]&gt;&lt;/jdbc.url&gt;       <br />&#160;&#160;&#160; &lt;jdbc.username&gt;test&lt;/jdbc.username&gt;       <br />&#160;&#160;&#160; &lt;jdbc.password&gt;test&lt;/jdbc.password&gt;</p>
</blockquote>
<p>所以，如果这样执行：</p>
<blockquote><p><font color="#333333">mvn test</font></p>
</blockquote>
<p>将执行derby嵌入式数据库。</p>
<p>切换到mysql下的测试命令：</p>
<blockquote><p><font color="#333333">mvn test -P mysql</font></p>
</blockquote>
<p>这样就创建了一个不影响项目做版本控制的多数据库配置方式的maven方案。</p>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1209/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级hibernate3.3.1.ga遇到的另一个问题</title>
		<link>http://marshal.easymorse.com/archives/1255?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%258d%2587%25e7%25ba%25a7hibernate331ga%25e9%2581%2587%25e5%2588%25b0%25e7%259a%2584%25e5%258f%25a6%25e4%25b8%2580%25e4%25b8%25aa%25e9%2597%25ae%25e9%25a2%2598</link>
		<comments>http://marshal.easymorse.com/archives/1255#comments</comments>
		<pubDate>Mon, 15 Dec 2008 12:39:00 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1255</guid>
		<description><![CDATA[和spring集成使用hibernate3.3.1.ga的时候，启动时出现异常： &#8230; with name &#8216;sessionFactory&#8217; defined in class path resource [util/dao/dao.config.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter:java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter 解决办法是，增加javassist的库支持，在maven的pom文件中增加： &#160; &#60;dependency&#62; &#60;groupId&#62;javassist&#60;/groupId&#62; &#60;artifactId&#62;javassist&#60;/artifactId&#62; &#60;version&#62;3.8.0.GA&#60;/version&#62; &#60;/dependency&#62;]]></description>
			<content:encoded><![CDATA[<p>和spring集成使用hibernate3.3.1.ga的时候，启动时出现异常：</p>
<blockquote><p>&#8230; with name &#8216;sessionFactory&#8217; defined in class path resource [util/dao/dao.config.<br />xml]: Invocation of init method failed; nested exception is java.lang.NoClassDef<br />FoundError: javassist/util/proxy/MethodFilter:<br />java.lang.ClassNotFoundException: javassist.util.proxy.MethodFilter</p>
</blockquote>
<p>解决办法是，增加javassist的库支持，在maven的pom文件中增加：
<p>&nbsp;</p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:efbec1d4-6096-4970-92f3-a09d4307a45d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">javassist</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">javassist</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">3.8.0.GA</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span></div>
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1255/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>升级hibernate版本到3.3.1.GA</title>
		<link>http://marshal.easymorse.com/archives/1249?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%258d%2587%25e7%25ba%25a7hibernate%25e7%2589%2588%25e6%259c%25ac%25e5%2588%25b0331ga</link>
		<comments>http://marshal.easymorse.com/archives/1249#comments</comments>
		<pubDate>Mon, 15 Dec 2008 12:27:50 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[slf4j]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/1249</guid>
		<description><![CDATA[项目中使用的hibernate版本是3.2.6.ga，现在需要升级到3.3.1.ga，在集成spring的项目中出现了异常，找不到slf4j的类： Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 配置最新的slf4j库也不行，hibernate中使用的是1.5.2版本。版本问题解决了，又出现找不到cglib的错误，于是在maven中显式的声明cglib库的依赖。之前是不需要这样显式声明的。 这样，maven的pom文件中依赖关系类似如下配置： &#60;dependency&#62; &#60;groupId&#62;org.hibernate&#60;/groupId&#62; &#60;artifactId&#62;hibernate-core&#60;/artifactId&#62; &#60;version&#62;3.3.1.ga&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#60;groupId&#62;org.hibernate&#60;/groupId&#62; &#60;artifactId&#62;hibernate-annotations&#60;/artifactId&#62; &#60;version&#62;3.4.0.GA&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#60;groupId&#62;log4j&#60;/groupId&#62; &#60;artifactId&#62;log4j&#60;/artifactId&#62; &#60;version&#62;1.2.14&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#60;groupId&#62;cglib&#60;/groupId&#62; &#60;artifactId&#62;cglib-nodep&#60;/artifactId&#62; &#60;version&#62;2.1_3&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#60;groupId&#62;org.slf4j&#60;/groupId&#62; &#60;artifactId&#62;slf4j-nop&#60;/artifactId&#62; &#60;version&#62;1.5.2&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#60;groupId&#62;org.slf4j&#60;/groupId&#62; &#60;artifactId&#62;slf4j-log4j12&#60;/artifactId&#62; &#60;version&#62;1.5.2&#60;/version&#62; &#60;/dependency&#62;]]></description>
			<content:encoded><![CDATA[<p>项目中使用的hibernate版本是3.2.6.ga，现在需要升级到3.3.1.ga，在集成spring的项目中出现了异常，找不到slf4j的类：</p>
<blockquote><p>Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder</p>
</blockquote>
<p>配置最新的slf4j库也不行，hibernate中使用的是1.5.2版本。版本问题解决了，又出现找不到cglib的错误，于是在maven中显式的声明cglib库的依赖。之前是不需要这样显式声明的。</p>
<p><span id="more-1249"></span>
<p>这样，maven的pom文件中依赖关系类似如下配置：</p>
<div class="wlWriterSmartContent" id="scid:F2210F5F-69EB-4d4c-AFF7-B8A050E9CC72:07801a7f-872b-460c-b970-553de02130e3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<pre  style="width:100%;;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">org.hibernate</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">hibernate-core</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">3.3.1.ga</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">org.hibernate</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">hibernate-annotations</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">3.4.0.GA</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">log4j</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">log4j</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1.2.14</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">cglib</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">cglib-nodep</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">2.1_3</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">org.slf4j</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">slf4j-nop</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1.5.2</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">org.slf4j</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">groupId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">slf4j-log4j12</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">artifactId</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
    </span><span style="color: #0000FF;">&lt;</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">1.5.2</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">version</span><span style="color: #0000FF;">&gt;</span><span style="color: #000000;">
</span><span style="color: #0000FF;">&lt;/</span><span style="color: #800000;">dependency</span><span style="color: #0000FF;">&gt;</span></div>
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/1249/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在spring-dm环境下增加hibernate绑定</title>
		<link>http://marshal.easymorse.com/archives/882?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%259c%25a8spring-dm%25e7%258e%25af%25e5%25a2%2583%25e4%25b8%258b%25e5%25a2%259e%25e5%258a%25a0hibernate%25e7%25bb%2591%25e5%25ae%259a</link>
		<comments>http://marshal.easymorse.com/archives/882#comments</comments>
		<pubDate>Wed, 19 Nov 2008 16:56:16 +0000</pubDate>
		<dc:creator>Marshal</dc:creator>
				<category><![CDATA[计算机技术]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jee]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring-dm]]></category>

		<guid isPermaLink="false">http://marshal.easymorse.com/archives/882</guid>
		<description><![CDATA[在spring-dm（1.1.2）环境下增加hibernate（3.2.6 ga）绑定的步骤： 支持类库 设置maven的pom文件： &#60;dependency&#62; &#160;&#160;&#160; &#60;groupId&#62;org.hibernate&#60;/groupId&#62; &#160;&#160;&#160; &#60;artifactId&#62;com.springsource.org.hibernate&#60;/artifactId&#62; &#160;&#160;&#160; &#60;version&#62;3.2.6.ga&#60;/version&#62; &#60;/dependency&#62; &#60;dependency&#62; &#160;&#160;&#160; &#60;groupId&#62;javax.xml.stream&#60;/groupId&#62; &#160;&#160;&#160; &#60;artifactId&#62;com.springsource.javax.xml.stream&#60;/artifactId&#62; &#160;&#160;&#160; &#60;version&#62;1.0.1&#60;/version&#62; &#60;/dependency&#62; 最新的hibernate是3.3.2.ga，由于slf4j版本需要1.5.2以上，高于当前spring-dm1.1.2环境的1.5.0，另外hibernate 3.3.x新增的特性暂时不用，所以暂时用3.2.6。 设置config.ini文件 在config.ini文件增加以下bundle的启动设置： com.springsource.antlr.jar@start,com.springsource.javassist.jar@start,com.springsource.org.apache.commons.collections.jar@start,com.springsource.org.dom4j.jar@start,com.springsource.javax.xml.stream.jar@start,com.springsource.org.objectweb.asm.jar@start,com.springsource.org.objectweb.asm.attrs.jar@start,com.springsource.org.hibernate.jar@start 设置MANIFEST.MF文件 增加： Import-Package: &#8230;,org.hibernate;version=&#34;[3.2.6.ga,3.2.6.ga]&#34;]]></description>
			<content:encoded><![CDATA[<p>在spring-dm（1.1.2）环境下增加hibernate（3.2.6 ga）绑定的步骤：</p>
<p> <span id="more-882"></span><br />
<h4>支持类库</h4>
<p>设置maven的pom文件：</p>
<blockquote><p>&lt;dependency&gt;     <br />&#160;&#160;&#160; &lt;groupId&gt;org.hibernate&lt;/groupId&gt;      <br />&#160;&#160;&#160; &lt;artifactId&gt;com.springsource.org.hibernate&lt;/artifactId&gt;      <br />&#160;&#160;&#160; &lt;version&gt;3.2.6.ga&lt;/version&gt;      <br />&lt;/dependency&gt;      <br />&lt;dependency&gt;      <br />&#160;&#160;&#160; &lt;groupId&gt;javax.xml.stream&lt;/groupId&gt;      <br />&#160;&#160;&#160; &lt;artifactId&gt;com.springsource.javax.xml.stream&lt;/artifactId&gt;      <br />&#160;&#160;&#160; &lt;version&gt;1.0.1&lt;/version&gt;      <br />&lt;/dependency&gt;</p>
</blockquote>
<p>最新的hibernate是3.3.2.ga，由于slf4j版本需要1.5.2以上，高于当前spring-dm1.1.2环境的1.5.0，另外hibernate 3.3.x新增的特性暂时不用，所以暂时用3.2.6。</p>
<h4>设置config.ini文件</h4>
<p>在config.ini文件增加以下bundle的启动设置：</p>
<blockquote><p><a href="mailto:com.springsource.antlr.jar@start,com.springsource.javassist.jar@start,com.springsource.org.apache.commons.collections.jar@start,com.springsource.org.dom4j.jar@start,com.springsource.javax.xml.stream.jar@start,com.springsource.org.objectweb.asm.jar@start,com.springsource.org.objectweb.asm.attrs.jar@start,com.springsource.org.hibernate.jar@start">com.springsource.antlr.jar@start,com.springsource.javassist.jar@start,com.springsource.org.apache.commons.collections.jar@start,com.springsource.org.dom4j.jar@start,com.springsource.javax.xml.stream.jar@start,com.springsource.org.objectweb.asm.jar@start,com.springsource.org.objectweb.asm.attrs.jar@start,com.springsource.org.hibernate.jar@start</a></p>
</blockquote>
<h4>设置MANIFEST.MF文件</h4>
<p>增加：</p>
<blockquote><p>Import-Package: &#8230;,org.hibernate;version=&quot;[3.2.6.ga,3.2.6.ga]&quot;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://marshal.easymorse.com/archives/882/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

