<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>studyworks</title>
    <description></description>
    <link>http://studyworks.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>rails.vim ubuntu crash solution</title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/205115" style="color:red;">http://studyworks.javaeye.com/blog/205115</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          download the latest vim (vim-7.1.293) source code (see<br />http://www.vim.org/download.php), and compiled it:<br /><br />&nbsp; cd vim7<br />&nbsp; ./configure --with-features=huge<br />&nbsp; make<br />&nbsp; make install<br /><br />reference: http://soyunperdedor.com/node/24
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/205115#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 14:01:15 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/205115</link>
        <guid>http://studyworks.javaeye.com/blog/205115</guid>
      </item>
          <item>
        <title>hibernate persist() vs save()</title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/194729" style="color:red;">http://studyworks.javaeye.com/blog/194729</a>&nbsp;
          发表时间: 2008年05月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          persist() is well defined. It makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. The spec doesn't say that, which is the problem I have with persist().<br /><br />persist() also guarantees that it will not execute an INSERT statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context.<br /><br />A method like persist() is required.<br /><br />save() does not guarantee the same, it returns an identifier, and if an INSERT has to be executed to get the identifier (e.g. "identity" generator, not "sequence"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is not good in a long-running conversation with an extended Session/persistence context.
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/194729#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 20 May 2008 10:03:07 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/194729</link>
        <guid>http://studyworks.javaeye.com/blog/194729</guid>
      </item>
          <item>
        <title>又一个DynamicDao</title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/192942" style="color:red;">http://studyworks.javaeye.com/blog/192942</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p class="MsoNormal" style="margin-left: 21pt; text-align: left;"><strong><span style="font-family: 宋体;">模型如下：</span></strong></p>
<pre name="code" class="java">@Entity
public class User extends BaseEntry{
	private String name;
	private int age;
	@OneToMany(mappedBy = "user", cascade=CascadeType.ALL)
	private Set&lt;Article&gt; articles = new HashSet&lt;Article&gt;();
        .......
}
</pre>
&nbsp;
<pre name="code" class="java">@Entity
public class Article extends BaseEntry{
private String title;
	private String content;
	@ManyToOne
	private User user;
	….
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;<span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">将Dao</span><span style="font-size: 10pt; font-family: 宋体; color: black;">继承</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">GenericDao</span><span style="font-size: 10pt; font-family: 宋体; color: black;">，</span><span style="font-size: 10pt; font-family: 宋体; color: black;">如：</span></p>
<pre name="code" class="java">public interface UserDao extends GenericDao&lt;User, Integer&gt;{
}
</pre>
<pre name="code" class="java">public interface ArticleDao extends GenericDao&lt;Article, Integer&gt;{
}
</pre>
<p>&nbsp;</p>
<p>然后在配置文件中增加如下代码：</p>
<pre name="code" class="xml">&lt;bean id="parentDao" class="com.dynamicDao.GenericDaoFactoryBean"
	abstract="true" p:sessionFactory-ref="sessionFactory"/&gt;
		
&lt;bean id="userDao" parent="parentDao"
	p:daoInterface="com.dynamicDao.fixtures.dao.UserDao"&gt;
&lt;/bean&gt;
&lt;bean id="articleDao" parent="parentDao"
	p:daoInterface="com.dynamicDao.fixtures.dao.ArticleDao"&gt;
&lt;/bean&gt;
</pre>
<p>&nbsp;
在Service中注入Dao即可，如：</p>
<pre name="code" class="java">public UserService{
@Autowired
UserDao userDao;
...
}</pre>
&nbsp;
<p><span style="font-size: small;"><strong>&nbsp;<span style="font-size: 10.5pt; font-family: 宋体;">基本功能：</span></strong></span></p>
<p><span style="font-size: xx-small;"><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">GenericDao</span><span style="font-family: 宋体; font-size: x-small;">继承</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">Session</span><span style="font-size: 10.5pt; font-family: 宋体;">接口，</span><span style="font-size: 10.5pt; font-family: 宋体;">另外还继承以下接口：</span></span></p>
<pre name="code" class="java">public interface TypedSession&lt;T, PK extends Serializable&gt; {
	Criteria createCriteria();
	T load(PK pk);
	T load(PK pk, LockMode lockMode);
	T get(PK pk);
	T get(PK pk, LockMode lockMode);
}

对应着Session中需要实体类型的方法，如T load(PK pk)对应着Session#load(Class entityClass, Serializable pk);
</pre>
&nbsp;
<pre name="code" class="java">public interface SimpleCriteria&lt;T&gt; {
	public SimpleCriteria eq(String property, Object value);
	public SimpleCriteria like(String property, Object value);
	public SimpleCriteria gt(String property, Object value);
	public SimpleCriteria order(String property, boolean... asc);
	public SimpleCriteria include(String...associations);
	public SimpleCriteria limit(int limit);
	public SimpleCriteria page(int pageNum, int pageSize);
	public T first();
	public List&lt;T&gt; all();
}
简单地包装了Criteria（还需完善），使用如下：
userDao.eq("name", "tester1").first()
//eager loading
userDao.eq("id", 1).include("articles").first()
</pre>
&nbsp;
<pre name="code" class="java">public interface BaseDao&lt;T, PK extends Serializable&gt;{
	Class getEntityClass();
	Session getSession();
	SessionFactory getSessionFactory();
	Collection&lt;T&gt; findByHsql(String hsql, Object...args); 
	SimpleCriteria createSimpleCriteria();
}
有些简陋，因为GenericDao已经继承Session。</pre>
<p><strong><span style="font-size: small;">&nbsp;<span style="font-size: 10pt; font-family: 宋体; color: black;">动态查询：</span></span></strong></p>
<p><span style="font-size: 10pt; font-family: 宋体; color: black;">在</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">UserDao</span><span style="font-size: 10pt; font-family: 宋体; color: black;">加入以下方法即可：</span></p>
<pre name="code" class="java">public interface UserDao extends GenericDao&lt;User, Integer&gt;{
	List&lt;User&gt; findByAge(int age, SimpleCriteria sc);
	User findByNameAndAge(Object...args);
}
SimpleCriteria是用来增加一些额外的条件，只要将SimpleCriteria作为最后一个参数即可,也可以不要,如List&lt;User&gt; findByAge(int age)。
目前不支持关联查询，如ArticleDao.findByUserId(int id)</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: small;"><strong><span style="font-size: 10pt; font-family: 宋体; color: black;">自定义接口</span></strong></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span style="font-size: small;"><strong>:</strong></span></span></p>
<ol>
<li><span style="font-size: 10pt; font-family: 宋体; color: black;">先定义一个接口，如：</span>
<pre name="code" class="java">public interface CustomDao {
	List&lt;Article&gt; articlesAboutPageTest();
}
</pre>
</li>
<li>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: 10pt; font-family: 宋体; color: black;">然后实现：</span></p>
<pre name="code" class="java">public class CustomDaoImpl implements CustomDao, GenericDaoAware{
	private GenericDao genericDao;
	public List&lt;Article&gt; articlesAboutPageTest() {
		return this.genericDao.eq("title", "pageTest").all();
	}

	public void setGenericDao(GenericDao genericDao) {
		this.genericDao = genericDao;
	}
}
注意这里继承了GenericDaoAware，用来注入GenericDao</pre>
</li>
<li>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: 10pt; font-family: 宋体; color: black;">在配置文件中增加：</span></p>
<pre name="code" class="xml">&lt;bean id="articleDao" parent="parentDao"
	p:daoInterface="com.dynamicDao.fixtures.dao.ArticleDao"&gt;
	<span style="color: #000000;">&lt;property name="advices"&gt;
		&lt;list&gt;
			&lt;bean class="com.dynamicDao.fixtures.dao.CustomDaoImpl"/&gt;
		&lt;/list&gt;
	&lt;/property&gt;</span>
&lt;/bean&gt;</pre>
</li>
<li>
<p class="MsoNormal" align="left" style="text-align: left;"><span style="font-size: 10pt; font-family: 宋体; color: black;">最后一步就是让你的</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Dao</span><span style="font-size: 10pt; font-family: 宋体; color: black;">继承</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">CustomerDao</span><span style="font-size: 10pt; font-family: 宋体; color: black;">，</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"> </span><span style="font-size: 10pt; font-family: 宋体; color: black;">如：</span></p>
&nbsp;
<pre name="code" class="java">public interface ArticleDao extends GenericDao&lt;Article, Integer&gt;, <span style="color: #000000;">CustomDao</span>{ }</pre>
&nbsp;</li>
</ol>
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/192942#comments" style="color:red;">已有 <strong>4</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 14:57:59 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/192942</link>
        <guid>http://studyworks.javaeye.com/blog/192942</guid>
      </item>
          <item>
        <title>:dependent =&gt; :delete_all vs :destroy_all</title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/182127" style="color:red;">http://studyworks.javaeye.com/blog/182127</a>&nbsp;
          发表时间: 2008年04月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          :delete_all is much faster than :destroy_all, it doesn't trigger any destroy callbacks on the associated object.<br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; :destroy_all iteratively call the associated objects's destroy method
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/182127#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Apr 2008 16:28:29 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/182127</link>
        <guid>http://studyworks.javaeye.com/blog/182127</guid>
      </item>
          <item>
        <title>Reloading the Association</title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/182120" style="color:red;">http://studyworks.javaeye.com/blog/182120</a>&nbsp;
          发表时间: 2008年04月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Notice that the second time I invoke the association via user, the object_id remains the same. The related object has been cached. However, passing true to the accessor reloads the relationship and I get a new instance.<br /><br />>> ts = Timesheet.find :first<br />=> #&lt;Timesheet:0x3454554 @attributes={“updated_at”=>”2006-11-21<br />05:44:09”, “id”=>”3”, “user_id”=>”1”, “submitted”=>nil,<br />“created_at”=>”2006-11-21 05:44:09”}><br />>> ts.user.object_id<br />=> 27421330<br />>> ts.user.object_id<br />=> 27421330<br />>> ts.user(true).object_id<br />=> 27396270
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/182120#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Apr 2008 15:50:25 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/182120</link>
        <guid>http://studyworks.javaeye.com/blog/182120</guid>
      </item>
          <item>
        <title>The difference between &lt;&lt; and create </title>
        <author>studyworks</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://studyworks.javaeye.com">studyworks</a>&nbsp;
                    链接：<a href="http://studyworks.javaeye.com/blog/182112" style="color:red;">http://studyworks.javaeye.com/blog/182112</a>&nbsp;
          发表时间: 2008年04月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. &lt;&lt; is transactional, create is not<br />2. &lt;&lt; method triggers the :before_add and :after_add callbacks, but the create method does not<br />3. &lt;&lt; method returns operation_success ? association_proxy : false, while the create method returns the new instance created.
          <br/><br/>
          <span style="color:red;">
            <a href="http://studyworks.javaeye.com/blog/182112#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 Apr 2008 15:33:36 +0800</pubDate>
        <link>http://studyworks.javaeye.com/blog/182112</link>
        <guid>http://studyworks.javaeye.com/blog/182112</guid>
      </item>
      </channel>
</rss>