<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5443694850566535151</id><updated>2024-12-19T11:11:01.375+08:00</updated><category term="Hibernate"/><category term="Design Pattern"/><category term="Java"/><category term="JQuery"/><category term="Jakarta commons"/><category term="regex"/><category term="linux"/><category term="tomcat"/><category term="AWS"/><category term="Exception"/><category term="Facebook"/><category term="Hadoop"/><category term="Image"/><category term="Jakarta"/><category term="Jakarta commons-httpclient"/><category term="Quartz"/><category term="Sql"/><category term="Test"/><category term="Todd"/><category term="css"/><category term="javascript"/><category term="lucene"/><category term="mysql"/><category term="prototype"/><category term="中文"/><category term="版本控制"/><title type='text'>Todd</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-1026489692078957922</id><published>2016-01-13T11:16:00.003+08:00</published><updated>2016-01-13T11:18:51.366+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sql"/><title type='text'></title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
一對多的table, 如何只捉，多的那邊，其中一筆呢?&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;原來有下面寫法&lt;br /&gt;
&lt;br /&gt;
select * from users join widgets on widgets.id = (&lt;br /&gt;
&amp;nbsp; &amp;nbsp; select id from widgets&lt;br /&gt;
&amp;nbsp; &amp;nbsp; where widgets.user_id = users.id&lt;br /&gt;
&amp;nbsp; &amp;nbsp; order by created_at desc&lt;br /&gt;
&amp;nbsp; &amp;nbsp; limit 1&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
還有其他方法&lt;br /&gt;
Ref :&amp;nbsp;&lt;a href=&quot;https://www.periscopedata.com/blog/4-ways-to-join-only-the-first-row-in-sql.html&quot;&gt;https://www.periscopedata.com/blog/4-ways-to-join-only-the-first-row-in-sql.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/1026489692078957922/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/1026489692078957922' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1026489692078957922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1026489692078957922'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2016/01/table-select-from-users-join-widgets-on.html' title=''/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-5492424008431959911</id><published>2015-12-30T10:24:00.003+08:00</published><updated>2015-12-30T10:41:01.324+08:00</updated><title type='text'>mongodb embedded documents query for spring data</title><content type='html'>&lt;br /&gt;
&lt;div&gt;
mongodb embedded documents query for spring data&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.Aggreation&lt;br /&gt;
&lt;br /&gt;
db.user.aggregate(&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $match : {&#39;_id&#39;: 1}},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $project: {&#39;friendUserList&#39;: 1 }},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $unwind: &quot;$friendUserList&quot; },&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;&lt;/span&gt;{ $match : {&#39;friendUserList.state&#39;: &#39;INIT&#39;}},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $group: { _id: &quot;result&quot;, count: { $sum: 1 }}}&lt;/div&gt;
&lt;div&gt;
);&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
Aggregation &lt;span class=&quot;s1&quot;&gt;aggregation&lt;/span&gt; = newAggregation(&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match(Criteria.where(&lt;span class=&quot;s2&quot;&gt;&quot;_id&quot;&lt;/span&gt;).is(1)),&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; project(&lt;span class=&quot;s2&quot;&gt;&quot;friendUserList&quot;&lt;/span&gt;),&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unwind(&lt;span class=&quot;s2&quot;&gt;&quot;friendUserList&quot;&lt;/span&gt;),&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match(Criteria.where(&lt;span class=&quot;s2&quot;&gt;&quot;friendUserList.state&quot;&lt;/span&gt;).is(&lt;span class=&quot;s2&quot;&gt;&quot;INIT&quot;&lt;/span&gt;)),&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; group(&lt;span class=&quot;s2&quot;&gt;&quot;friendUserList&quot;&lt;/span&gt;).count().as(&lt;span class=&quot;s2&quot;&gt;&quot;count&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
);&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
AggregationResults&amp;lt;User&amp;gt; &lt;span class=&quot;s1&quot;&gt;result&lt;/span&gt; =&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; mongoOperations&lt;/span&gt;.aggregate(&lt;span class=&quot;s1&quot;&gt;aggregation&lt;/span&gt;, &lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;, User.&lt;span class=&quot;s4&quot;&gt;class&lt;/span&gt;);&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s4&quot;&gt;return&lt;/span&gt; (&lt;span class=&quot;s4&quot;&gt;long&lt;/span&gt;) &lt;span class=&quot;s1&quot;&gt;result&lt;/span&gt;.getMappedResults().size();&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/5492424008431959911/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/5492424008431959911' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5492424008431959911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5492424008431959911'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2015/12/mongodb-embedded-documents-query-for.html' title='mongodb embedded documents query for spring data'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-7212211193911407766</id><published>2015-12-30T10:24:00.002+08:00</published><updated>2015-12-30T10:40:20.884+08:00</updated><title type='text'>mongodb embedded documents query</title><content type='html'>&lt;h2&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2&gt;
&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
mongodb&amp;nbsp;embedded&amp;nbsp;documents&amp;nbsp;query example&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;b&gt;schema&lt;/b&gt;&lt;/h2&gt;
&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;_id&quot; : NumberLong(1),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;_class&quot; : &quot;User&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;account&quot; : &quot;todd1&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;friendUserList&quot; : [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userId&quot; : NumberLong(2),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userAccount&quot; : &quot;todd2&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;state&quot; : &quot;AGREE&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userId&quot; : NumberLong(3),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userAccount&quot; : &quot;todd3&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;state&quot; : &quot;INIT&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userId&quot; : NumberLong(5),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userAccount&quot; : &quot;todd4&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;state&quot; : &quot;INIT&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;_id&quot; : NumberLong(2),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;_class&quot; : &quot;User&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;account&quot; : &quot;todd2&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;friendUserList&quot; : [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userId&quot; : NumberLong(6),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userAccount&quot; : &quot;todd6&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;state&quot; : &quot;AGREE&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userId&quot; : NumberLong(7),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;userAccount&quot; : &quot;todd7&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;state&quot; : &quot;INIT&quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Query&lt;/h2&gt;
&lt;b&gt;1.embedded document 只要有符合，整個document&lt;/b&gt;&lt;br /&gt;
db.user.find({&lt;br /&gt;
&amp;nbsp; &amp;nbsp; friendUserList : {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $elemMatch : {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; state : &#39;INIT&#39;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
但這樣方式，直接這樣寫效果相同&lt;br /&gt;
db.user.find( { &#39;friendUserList.state&#39;: &#39;INIT&#39; } )&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.指定條件與回傳的欄位&lt;/b&gt;&lt;br /&gt;
db.user.find({ &#39;_id&#39;: 1 }, {&#39;account&#39;: 1, &#39;friendUserList&#39;: 1});&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;3. match 先搜尋符合條件，但加總embedded的數量&lt;/b&gt;&lt;br /&gt;
db.user.aggregate(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $match : {&#39;friendUserList.state&#39;: &#39;INIT&#39;}},&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $project: {&#39;friendUserList&#39;: 1 }},&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $unwind: &quot;$friendUserList&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $group: { _id: &quot;result&quot;, count: { $sum: 1 }}}&lt;br /&gt;
);&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;result&quot; : [&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;_id&quot; : &quot;result&quot;,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;count&quot; : 5.0000000000000000&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; ],&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;ok&quot; : 1.0000000000000000&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
所以若執行&lt;/div&gt;
&lt;div&gt;
db.user.aggregate(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $match : {&#39;friendUserList.state&#39;: &#39;AGREE&#39;}},&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $project: {&#39;friendUserList&#39;: 1 }},&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $unwind: &quot;$friendUserList&quot; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; { $group: { _id: &quot;result&quot;, count: { $sum: 1 }}}&lt;br /&gt;
);&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
回傳count 也會是 5&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
再加個條件 id = 1 來驗證看看&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
db.user.aggregate(&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $match : {&#39;friendUserList.state&#39;: &#39;AGREE&#39;&lt;span style=&quot;color: red;&quot;&gt;, &#39;_id&#39;: 1&lt;/span&gt;}},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $project: {&#39;friendUserList&#39;: 1 }},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $unwind: &quot;$friendUserList&quot; },&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $group: { _id: &quot;result&quot;, count: { $sum: 1 }}}&lt;/div&gt;
&lt;div&gt;
);&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;result&quot; : [&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;_id&quot; : &quot;result&quot;,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;count&quot; : 3.0000000000000000&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; ],&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;ok&quot; : 1.0000000000000000&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;4.使用mongodb提供的count function&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
db.user.count( { account: &#39;todd1&#39; } )&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
回傳會是1&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
db.user.count( { &#39;friendUserList.state&#39;: &#39;AGREE&#39; } )&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
回傳會是2&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
但這還是以root document為單位來看&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;5.只加總 embedded document 符合條件的數量&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
目前只試出使用aggregate的方式&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
db.user.aggregate(&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $match : {&#39;_id&#39;: 1}},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $project: {&#39;friendUserList&#39;: 1 }},&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $unwind: &quot;$friendUserList&quot; },&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt; { $match : {&#39;friendUserList.state&#39;: &#39;INIT&#39;}},&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; { $group: { _id: &quot;result&quot;, count: { $sum: 1 }}}&lt;/div&gt;
&lt;div&gt;
);&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
{&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;result&quot; : [&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;_id&quot; : &quot;result&quot;,&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;&quot;count&quot; : 2.0000000000000000&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; ],&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &quot;ok&quot; : 1.0000000000000000&lt;/div&gt;
&lt;div&gt;
}&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/7212211193911407766/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/7212211193911407766' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7212211193911407766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7212211193911407766'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2015/12/mongodb-embedded-documents-query.html' title='mongodb embedded documents query'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-2914362679659498217</id><published>2015-06-23T17:24:00.003+08:00</published><updated>2015-06-23T17:24:43.617+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>Create centos6 USB installer on Mac</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
原本想使用unetbootin來製做USB安裝程式，但搞老半天，&lt;br /&gt;
安裝到一半，就是會出現錯誤訊息&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Z1Gc8gwOSxBjz8hyO12_Tzd2thPt8xwtjIKSy3XzmdH-_6GFLlnJSD7PN3gEpkml0mrxFygzUWIzn_0veYlmCbRuuM1GnHSUcZ4kR8wNRwHaNuUUcOAgJNEkuLxA2I4TERArdeJQvc6r/s1600/%25E8%259E%25A2%25E5%25B9%2595%25E6%2588%25AA%25E5%259C%2596+2015-06-23+17.14.14.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Z1Gc8gwOSxBjz8hyO12_Tzd2thPt8xwtjIKSy3XzmdH-_6GFLlnJSD7PN3gEpkml0mrxFygzUWIzn_0veYlmCbRuuM1GnHSUcZ4kR8wNRwHaNuUUcOAgJNEkuLxA2I4TERArdeJQvc6r/s640/%25E8%259E%25A2%25E5%25B9%2595%25E6%2588%25AA%25E5%259C%2596+2015-06-23+17.14.14.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://wiki.centos.org/zh-tw/HowTos/InstallFromUSBkey&quot;&gt;官網&lt;/a&gt;有講由 CentOS 6.5 起，你只需透過 dd 把 ISO 檔移至 USB 儲存器，便能利用它進行安裝&lt;br /&gt;
&lt;br /&gt;
所以打開MAC&lt;br /&gt;
&lt;br /&gt;
1.看看掛載的情況 diskutil list&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY6OP5d4swL27iZvCzqKOMC6Lv0DNUmZ3uBfXrpln_HxSASRptAWp5baxg-206LMB605NKrMc_w4srt7sAeMF1URf_xEIHQTazkYUfPWFM13QzmCYE56bdYMnyBP6PJSIX8b0FRXUzG4uf/s1600/%25E8%259E%25A2%25E5%25B9%2595%25E6%2588%25AA%25E5%259C%2596+2015-06-23+17.19.00.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY6OP5d4swL27iZvCzqKOMC6Lv0DNUmZ3uBfXrpln_HxSASRptAWp5baxg-206LMB605NKrMc_w4srt7sAeMF1URf_xEIHQTazkYUfPWFM13QzmCYE56bdYMnyBP6PJSIX8b0FRXUzG4uf/s400/%25E8%259E%25A2%25E5%25B9%2595%25E6%2588%25AA%25E5%259C%2596+2015-06-23+17.19.00.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
/dev/disk2 就是隨身碟&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
2.卸載 diskutil unmountDisk /dev/disk2&lt;br /&gt;
&lt;br /&gt;
3.用官網教的指令就能製做出來了&lt;br /&gt;
&lt;br /&gt;
sudo dd if=CentOS-6.5-x86_64-minimal.iso of=/dev/disk2 bs=1m&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/2914362679659498217/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/2914362679659498217' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2914362679659498217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2914362679659498217'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2015/06/create-centos6-usb-installer-on-mac.html' title='Create centos6 USB installer on Mac'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Z1Gc8gwOSxBjz8hyO12_Tzd2thPt8xwtjIKSy3XzmdH-_6GFLlnJSD7PN3gEpkml0mrxFygzUWIzn_0veYlmCbRuuM1GnHSUcZ4kR8wNRwHaNuUUcOAgJNEkuLxA2I4TERArdeJQvc6r/s72-c/%25E8%259E%25A2%25E5%25B9%2595%25E6%2588%25AA%25E5%259C%2596+2015-06-23+17.14.14.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-2522993346782404288</id><published>2015-06-19T14:59:00.002+08:00</published><updated>2015-06-19T15:00:00.877+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWS"/><title type='text'>AWS EC2 Build Tomcat And Single MongoDB</title><content type='html'>&lt;h2&gt;
&lt;/h2&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://calculator.s3.amazonaws.com/index.html&quot;&gt;價格試算&lt;/a&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;div style=&quot;font-size: medium; font-weight: normal;&quot;&gt;
EC2&lt;/div&gt;
&lt;/h3&gt;
1.註冊&lt;br /&gt;
&lt;br /&gt;
2.進到console home後，選Region&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
3.Launch Instance&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
Key Pairs&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;產生[name].pem，並下載，登入時要用&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Security groups&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;增加SSH TCP 22 PORT&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
會自己建立一個VPC&lt;br /&gt;
&lt;br /&gt;
4.產生後，回到Instances 頁面&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;就會新增剛才建立的，可選上方的Connect，可以用 ssh [ubuntu]@[public_ip] -i $PATH/[name].pem 來登入&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
5.登入後，安裝tomcat, 放程式&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install tomat7&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;/usr/share/tomcat7&lt;/li&gt;
&lt;li&gt;/var/log/tomcat7&lt;/li&gt;
&lt;li&gt;/etc/tomcat7&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
sudo service tomcat7 start&lt;br /&gt;
sudo apt-get install default-jdk&lt;br /&gt;
sudo apt-get install maven&lt;br /&gt;
git clone https://xxx@code.google.com/p/projectname/&lt;br /&gt;
git pull&lt;br /&gt;
./sudo mvn clean&lt;br /&gt;
./sudo mvn install&lt;br /&gt;
&lt;div&gt;
sudo vim /etc/tomcat7/server.xml&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Mongodb&lt;/h3&gt;
1.可由Launch Instance選擇AMI 或 Service -&amp;gt; CloudFormation 使用template來建立&lt;br /&gt;
&lt;br /&gt;
先簡單化，這裡使用template, 並安裝在原來的VPC上，&lt;br /&gt;
且Replica Set只建一個&lt;br /&gt;
&lt;br /&gt;
安裝過程中&lt;br /&gt;
Subnet-xxxxxx 要輸入 Network Interface 頁面裡 同一個VPC所對應的Subnet ID&lt;br /&gt;
&lt;br /&gt;
會產一個新的instance&lt;br /&gt;
&lt;br /&gt;
同樣方式連進去&lt;br /&gt;
ssh [ubuntu]@[public_ip] -i $PATH/name.pem&lt;br /&gt;
&lt;br /&gt;
登入後，執行command&lt;br /&gt;
&lt;br /&gt;
mongo&lt;br /&gt;
config = { _id: &quot;r0&quot;, members: [ { _id:0, host:&quot;127.0.0.1:27017&quot; }] }&lt;br /&gt;
use testdb&lt;br /&gt;
db.createUser(&quot;root&quot;,&quot;password&quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Send Email&lt;/h3&gt;
選Service -&amp;gt; SES -&amp;gt;&amp;nbsp;SMTP Settings&lt;br /&gt;
1.Server Name&lt;br /&gt;
2.Create My SMTP Credentials 要認證過的email，才收的到信&lt;br /&gt;
&lt;div&gt;
3.上線前，需於Support Center寫信給官方，才能離開&lt;a href=&quot;http://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html&quot;&gt;sandbox&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Ref&lt;/h3&gt;
&lt;div&gt;
April 2015&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://s3.amazonaws.com/quickstart-reference/mongodb/latest/doc/MongoDB_on_the_AWS_Cloud.pdf&quot;&gt;https://s3.amazonaws.com/quickstart-reference/mongodb/latest/doc/MongoDB_on_the_AWS_Cloud.pdf&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/2522993346782404288/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/2522993346782404288' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2522993346782404288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2522993346782404288'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2015/06/aws-ec2-build-tomcat-and-single-mongodb.html' title='AWS EC2 Build Tomcat And Single MongoDB'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-5374382918985985553</id><published>2014-10-26T22:19:00.000+08:00</published><updated>2014-10-26T22:19:27.908+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Exception"/><title type='text'>org.springframework.web.context.ContextLoaderListener</title><content type='html'>&lt;br /&gt;
使用 Spring 3.2.x 時, 只要一讀取&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;listener&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;lt;/listener&amp;gt;&lt;br /&gt;
&lt;br /&gt;
就會出現下面Exception&lt;br /&gt;
&lt;br /&gt;
原來是因為我Tomcat使用了JDK1.8&lt;br /&gt;
若要用1.8, Spring必須upgrade成4才會支援1.8的byte code format&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
ERROR [org.springframework.web.context.ContextLoader] - &amp;lt;Context initialization failed&amp;gt;&lt;br /&gt;
java.lang.IllegalArgumentException&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;br /&gt;
嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener&lt;br /&gt;
java.lang.IllegalArgumentException&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;at org.springframework.asm.ClassReader.&amp;lt;init&amp;gt;(Unknown Source)&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
2014-10-26 22:00:13,255 WARN [org.springframework.web.context.support.XmlWebApplicationContext] - &amp;lt;Exception thrown from ApplicationListener handling ContextClosedEvent&amp;gt;&lt;/div&gt;
&lt;div&gt;
java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call &#39;refresh&#39; before multicasting events via the context: Root WebApplicationContext: startup date&lt;/div&gt;
&lt;div&gt;
at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:347)&lt;/div&gt;
&lt;div&gt;
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:334)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
[org.springframework.web.context.support.XmlWebApplicationContext] - &amp;lt;Exception thrown from LifecycleProcessor on context close&amp;gt;&lt;/div&gt;
&lt;div&gt;
java.lang.IllegalStateException: LifecycleProcessor not initialized - call &#39;refresh&#39; before invoking lifecycle methods via the context: Root WebApplicationContext: startup date&lt;/div&gt;
&lt;div&gt;
at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:360)&lt;/div&gt;
&lt;div&gt;
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1057)&lt;/div&gt;
&lt;div&gt;
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/5374382918985985553/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/5374382918985985553' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5374382918985985553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5374382918985985553'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2014/10/orgspringframeworkwebcontextcontextload.html' title='org.springframework.web.context.ContextLoaderListener'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-8705620486533101742</id><published>2014-09-10T15:30:00.000+08:00</published><updated>2014-09-10T15:30:29.599+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design Pattern"/><title type='text'>Design Pattern - CQRS</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
CQRS&lt;br /&gt;
&lt;br /&gt;
ref:&lt;br /&gt;
http://johnnycoder.com/blog/2009/12/18/learn-domain-driven-design/&lt;br /&gt;
http://www.codeproject.com/Articles/555855/Introduction-to-CQRS&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
通常進行CRUD會有二個問題&lt;br /&gt;
collaboration 同時操作相同資料時&lt;br /&gt;
staleness 某筆資料, 當A查詢後, B修改&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
主要是想把二者責任分離&lt;br /&gt;
Command&lt;br /&gt;
Query&lt;br /&gt;
&lt;br /&gt;
image source :&amp;nbsp;http://www.udidahan.com/2009/12/09/clarified-cqrs/&lt;br /&gt;
&lt;img height=&quot;319&quot; id=&quot;irc_mi&quot; src=&quot;http://www.udidahan.com/wp-content/uploads/cqrs.png&quot; style=&quot;margin-top: 37px;&quot; width=&quot;500&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
image source :&amp;nbsp;http://www.codeproject.com/Articles/555855/Introduction-to-CQRS&lt;br /&gt;
&lt;br /&gt;
&lt;img height=&quot;393&quot; id=&quot;irc_mi&quot; src=&quot;http://www.codeproject.com/KB/architecture/555855/CQRS.jpg&quot; style=&quot;margin-top: 0px;&quot; width=&quot;436&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
image source :&amp;nbsp;http://msdn.microsoft.com/en-us/library/jj591573.aspx&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;393&quot; id=&quot;irc_mi&quot; src=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; style=&quot;margin-top: 0px;&quot; width=&quot;538&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;http://i.msdn.microsoft.com/dynimg/IC610350.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/8705620486533101742/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/8705620486533101742' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/8705620486533101742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/8705620486533101742'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2014/09/design-pattern-cqrs.html' title='Design Pattern - CQRS'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-7586710769394749068</id><published>2014-09-05T18:03:00.004+08:00</published><updated>2014-09-05T18:04:02.763+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><title type='text'>Facebook 自訂分享按鈕</title><content type='html'>&lt;br /&gt;
1.在html tag內加入 xmlns:og、xmlns:fb屬性&lt;br /&gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;xmlns:og=&quot;http://ogp.me/ns#&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;xmlns:fb=&quot;http://www.facebook.com/2008/fbml&quot;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
2.head tag加入&lt;br /&gt;
&amp;lt;meta name=&quot;og:description&quot; content=&quot;&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;og:title&quot; content=&quot;&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;og:type&quot; content=&quot;website&quot;/&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;og:url&quot; content=&quot;&lt;a href=&quot;http://cute.pinkygame.com/Forum/MsgL.asp?TopicNum=232%22/&quot;&gt;&quot;/&lt;/a&gt;&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;og:image&quot; content=&quot;&lt;a href=&quot;http://www.pinkygame.com/Download/logo/cute.gif%22/&quot;&gt;&quot;/&lt;/a&gt;&amp;gt;&amp;nbsp;縮圖, 可設定多圖&lt;br /&gt;
&amp;lt;meta property=&quot;og:site_name&quot; content=&quot;&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;fb:app_id&quot; content=&quot;&quot; /&amp;gt;&lt;br /&gt;
&amp;lt;meta property=&quot;fb:admins&quot; content=&quot;&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.body tag裡面加入&lt;br /&gt;
&amp;lt;div id=&quot;fb-root&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
window.fbAsyncInit = function() {&lt;br /&gt;
&amp;nbsp; FB.init({appId: &#39;&lt;span style=&quot;color: red;&quot;&gt;app id&lt;/span&gt;&#39;, status: true, cookie: true, xfbml: true});&lt;br /&gt;
};&lt;br /&gt;
(function() {&lt;br /&gt;
&amp;nbsp; var e = document.createElement(&#39;script&#39;); e.async = true;&lt;br /&gt;
&amp;nbsp; e.src = document.location.protocol + &#39;//connect.facebook.net/zh_TW/all.js&#39;;&lt;br /&gt;
&amp;nbsp; document.getElementById(&#39;fb-root&#39;).appendChild(e);&lt;br /&gt;
}());&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4.清除facebook cache&lt;br /&gt;
&lt;a href=&quot;https://developers.facebook.com/tools/debug&quot;&gt;https://developers.facebook.com/tools/debug&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
5.在要點擊分享的按鈕加上&lt;br /&gt;
&amp;lt;a href=&quot;https://www.facebook.com/sharer/sharer.php?u=url&quot; target=&quot;_blank&quot;&amp;gt;分享到FACEBOOK&amp;lt;/a&amp;gt;&lt;br /&gt;
或&lt;br /&gt;
&amp;lt;a target=&quot;_blank&quot; onclick=&quot;return !window.open(this.href, &#39;Facebook&#39;, &#39;width=640,height=300&#39;)&quot; href=&quot;http://www.facebook.com/sharer/sharer.php?u=url&quot;&amp;gt;分享到FACEBOOK&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
補充&lt;br /&gt;
1.自動產生連結網站&amp;nbsp;&lt;a href=&quot;http://www.sharelinkgenerator.com/&quot;&gt;http://www.sharelinkgenerator.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/7586710769394749068/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/7586710769394749068' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7586710769394749068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7586710769394749068'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2014/09/facebook_5.html' title='Facebook 自訂分享按鈕'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-4025271722199334465</id><published>2012-03-07T13:15:00.000+08:00</published><updated>2012-03-07T14:19:32.499+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="版本控制"/><title type='text'>Subclipse</title><content type='html'>&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: -webkit-auto;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;本文章介紹基本的合併流程, 以Subclipse為例&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: -webkit-auto;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: -webkit-auto;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: -webkit-auto;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;在要合併的目錄, 可以由 Team --&amp;gt; 列出Subclipse所有功能&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0w21vwnQknzz_wb6KdrjEWjESFD3dnmbkEFu63bvmhPG2Kjg49pFjIvMgxfwcOGhlMwNYejwjG9e9qH0pZT3LTjFLcgNP4j3ZkvwBSTdkC6lU7H2IUmgptAHB8rPd4joa7dC8qKuwwH5a/s1600/svn2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0w21vwnQknzz_wb6KdrjEWjESFD3dnmbkEFu63bvmhPG2Kjg49pFjIvMgxfwcOGhlMwNYejwjG9e9qH0pZT3LTjFLcgNP4j3ZkvwBSTdkC6lU7H2IUmgptAHB8rPd4joa7dC8qKuwwH5a/s640/svn2.png&quot; width=&quot;588&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;假設bdp是trunk project, bdp2是branch project&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0YVGuk-gKl1-g6R3qOeqo5NWoHXmEvAvW1aBLqY6tEOv_mq5Tk19e55gnR_Cy3cPGlePYkinzu_o8xKDdsnSacMXIZAMiV95zDbA8-9Jg0uFIQt7se3aHMvEpPAKFwq6ghSGG92bXTduN/s1600/svn1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0YVGuk-gKl1-g6R3qOeqo5NWoHXmEvAvW1aBLqY6tEOv_mq5Tk19e55gnR_Cy3cPGlePYkinzu_o8xKDdsnSacMXIZAMiV95zDbA8-9Jg0uFIQt7se3aHMvEpPAKFwq6ghSGG92bXTduN/s640/svn1.PNG&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;1.首先將新專案bdp2分支 Trunk &amp;gt; Branch&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3SRlgbWnJ2jftNsjye_07EYZAfUo5FOywoniL-dDWSBn23fPcsDJcOKwdheZnSH14Sm-ucwn8NFfIOf_revNZWzWrMBFtOVh6q86qJj6tpPJaKfZFFz-snyenTA9upSnC2W7Crvb0xB5A/s1600/svn3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3SRlgbWnJ2jftNsjye_07EYZAfUo5FOywoniL-dDWSBn23fPcsDJcOKwdheZnSH14Sm-ucwn8NFfIOf_revNZWzWrMBFtOVh6q86qJj6tpPJaKfZFFz-snyenTA9upSnC2W7Crvb0xB5A/s640/svn3.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;2.Branch開發到一半, 若要跟Trunk合併, 這時要選擇bdp2(也就是branch的project)按右鍵,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;選Team -&amp;gt; 合併 -&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;選擇 Merge a range of revisions&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaOoZ9UH5Hq3Nopjn-Vi_eYGnqa88_zvbKiVf3yDGgvZb0KX-hF5NpNdNrrNdaSPidUrdcj8dTdCxxJx1Qu4tJ0qhjIwvUaRKdUnjc72nWIasJeLXS8kZ9JBbHtPreI7lsJdW89aslgq2R/s1600/svn4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;258&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaOoZ9UH5Hq3Nopjn-Vi_eYGnqa88_zvbKiVf3yDGgvZb0KX-hF5NpNdNrrNdaSPidUrdcj8dTdCxxJx1Qu4tJ0qhjIwvUaRKdUnjc72nWIasJeLXS8kZ9JBbHtPreI7lsJdW89aslgq2R/s640/svn4.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLXE6ztKAe_JsnX6TfLjgT-qLEhkyKGI3Kjbkk0tekjKbnWg-ufsP9POD0bMfRuINA1xeh_Bd_29sXZecjsjYIMSg48XDW9f3fwQyiklxwktaqK4GQr9-v-GA_M-XDTpMX2ReYgDlVtn1/s1600/svn5.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfLXE6ztKAe_JsnX6TfLjgT-qLEhkyKGI3Kjbkk0tekjKbnWg-ufsP9POD0bMfRuINA1xeh_Bd_29sXZecjsjYIMSg48XDW9f3fwQyiklxwktaqK4GQr9-v-GA_M-XDTpMX2ReYgDlVtn1/s640/svn5.PNG&quot; width=&quot;548&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS_TagZ0n7ambjQ_jAUTLgOsv3qF4apuIDS1kwcK2xs72TVXJPz_VGqaWTbCerS4wRHvpZm3aIDgcwWqh3ObH9ZHpocEpxKr2IYGfkg6pySjc_UeDsacs0xjuqhTJemQEg3DJ4fkMb8NZO/s1600/1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS_TagZ0n7ambjQ_jAUTLgOsv3qF4apuIDS1kwcK2xs72TVXJPz_VGqaWTbCerS4wRHvpZm3aIDgcwWqh3ObH9ZHpocEpxKr2IYGfkg6pySjc_UeDsacs0xjuqhTJemQEg3DJ4fkMb8NZO/s640/1.PNG&quot; width=&quot;536&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoFPi0JtIel-Z9xzy_Bgmm4sUTleYrfjWVNq0YSesQgfwyeHWmqebHdX1-2VROvkttc6etdSL4CdI3NdcyJZpoRp8ALmHWsrLMYoe-mUGi58MJbeZ6ZOycAOS_qQTju_5jiwubthnkXoNa/s1600/2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoFPi0JtIel-Z9xzy_Bgmm4sUTleYrfjWVNq0YSesQgfwyeHWmqebHdX1-2VROvkttc6etdSL4CdI3NdcyJZpoRp8ALmHWsrLMYoe-mUGi58MJbeZ6ZOycAOS_qQTju_5jiwubthnkXoNa/s640/2.PNG&quot; width=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPbY-Z_sCgb5lVDE49R4SYB0X7rxwd01WmPJ9tJ5fz_1S1ssgMU1Bu663OtMIvnFYTUFdFXwCScNPYwkjxfP_7BQO_rNjD008I73l29K1qsM3TMA8i9e1qJvgjr6Lpunu_ZJPcjy3x-vbj/s1600/3.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPbY-Z_sCgb5lVDE49R4SYB0X7rxwd01WmPJ9tJ5fz_1S1ssgMU1Bu663OtMIvnFYTUFdFXwCScNPYwkjxfP_7BQO_rNjD008I73l29K1qsM3TMA8i9e1qJvgjr6Lpunu_ZJPcjy3x-vbj/s640/3.PNG&quot; width=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLJQFXBK0BfGEQGAFltT1ZknXKS1CsBEXNthiiMgXU4FoG6w92j-ZudRlDDjvMG46DdMfNGCashQpjE5A4KRV_LlwQ_N5z20bAyax9yRJU0qHEUgFFusaTrn628mU8Sy7QH_PaM8Yd2gx0/s1600/4.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLJQFXBK0BfGEQGAFltT1ZknXKS1CsBEXNthiiMgXU4FoG6w92j-ZudRlDDjvMG46DdMfNGCashQpjE5A4KRV_LlwQ_N5z20bAyax9yRJU0qHEUgFFusaTrn628mU8Sy7QH_PaM8Yd2gx0/s640/4.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfSG04wpp6GUbJvV5xA-CnTx18_Ohw_CfQPJl5jWMgL2pbe3H_1PLtL6pfAgt4ygmO6LoLf442aR5IP4VziRRtQvlOn38eMi3XlaQHnpD_6klc3xN41iAgXgPFPHaK6Y_1KYFLynjG2fej/s1600/5.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;592&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfSG04wpp6GUbJvV5xA-CnTx18_Ohw_CfQPJl5jWMgL2pbe3H_1PLtL6pfAgt4ygmO6LoLf442aR5IP4VziRRtQvlOn38eMi3XlaQHnpD_6klc3xN41iAgXgPFPHaK6Y_1KYFLynjG2fej/s640/5.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 18px; text-align: left;&quot;&gt;3.開發完成後, 要回主線 Trunk &amp;lt; Branch,&amp;nbsp;&lt;/span&gt;這時要選擇bdp(也就是trunk的project)按右鍵,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;選Team -&amp;gt; 合併 -&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;選擇 Reintegrate a branch&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQWa-zNSN9DUIT6qYIUBI8ATa96D-8xhQdTNJ-H5nLWJB5KGFzdGcOmCvSxjMVzDrTxjEfiZYF9GvXf_rXvZb7y_QFY6j_zVxtBBFPzBQhvL-giQMkNn61NaP2GXZ8nlQsflSqS05OnNxZ/s1600/svn6.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQWa-zNSN9DUIT6qYIUBI8ATa96D-8xhQdTNJ-H5nLWJB5KGFzdGcOmCvSxjMVzDrTxjEfiZYF9GvXf_rXvZb7y_QFY6j_zVxtBBFPzBQhvL-giQMkNn61NaP2GXZ8nlQsflSqS05OnNxZ/s640/svn6.PNG&quot; width=&quot;552&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;4.選擇要回去的branch的同階目錄(若從WebContent開始合併, 就指到branch的WebContent)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmduvx-2YgebttG9ZaHuUw4IsYHFbO5C7SGBBHnQK2Xfo3pgpMy23ZHDfSw0ev1P4FxsjQaMXZqzTbe1vjckHHTkOLobzvJ2sFV0qP5I48Q1UQ3vaRjQZmxUoK5ncfcE1a-f3qZjmlcK6A/s1600/9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmduvx-2YgebttG9ZaHuUw4IsYHFbO5C7SGBBHnQK2Xfo3pgpMy23ZHDfSw0ev1P4FxsjQaMXZqzTbe1vjckHHTkOLobzvJ2sFV0qP5I48Q1UQ3vaRjQZmxUoK5ncfcE1a-f3qZjmlcK6A/s640/9.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5fqcYnRY5UzkFjymJEioccZGlHXXKw5OjGFLPrtmajWOp0uDRsJfDfr979wXwxIz_mDyip-kd8JsIGMNL6zq7BwCdztsqwac1Xj2sDgJRG_1uv-nA4TSBXkoQXjwWscQ6tnFF1EME7-na/s1600/10.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;428&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5fqcYnRY5UzkFjymJEioccZGlHXXKw5OjGFLPrtmajWOp0uDRsJfDfr979wXwxIz_mDyip-kd8JsIGMNL6zq7BwCdztsqwac1Xj2sDgJRG_1uv-nA4TSBXkoQXjwWscQ6tnFF1EME7-na/s640/10.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOYRMNwSYhtZ5WL9sbOVqPY8NY3xzCGKJNZhNHHoDI6whdQnkrPHXpJdkr4yoZf53GHWXCPv5RfWHVvmedPgwOKPS-RyPlVWk2noW6sQG375k590qeDdNWFS3w_hQurXGIC1jhMWngAdkK/s1600/9.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;5.每次合併的結果, 可從 Merge Results Tab查看&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLLS_RhINh7f1wQs9sdC-oP9Jt44XTFKdOdIdd-lCCOm9laieDAhEHkKwfobOYJZ1agGsPl5hZW6fGsNGGhb4uu8MLEI_i5nD0uVHuJeAEWioO5TF7F07pMo0FsdU3jgDL4xF4t9nf_m0F/s1600/11.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLLS_RhINh7f1wQs9sdC-oP9Jt44XTFKdOdIdd-lCCOm9laieDAhEHkKwfobOYJZ1agGsPl5hZW6fGsNGGhb4uu8MLEI_i5nD0uVHuJeAEWioO5TF7F07pMo0FsdU3jgDL4xF4t9nf_m0F/s640/11.PNG&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;--&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Subclipse圖示的解釋&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;(圖示出處:&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/questions/3917925/what-do-the-arrow-icons-in-subclipse-mean&quot; style=&quot;background-color: white;&quot;&gt;http://stackoverflow.com/questions/3917925/what-do-the-arrow-icons-in-subclipse-mean&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Ignored File&quot; src=&quot;http://i.stack.imgur.com/uKpNO.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file ignored by version control. You can control what resources will be ignored by going to&amp;nbsp;&lt;em style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Window → Preferences → Team → Ignored Resources&lt;/em&gt;.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Unversioned File&quot; src=&quot;http://i.stack.imgur.com/UWf9X.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file not under version control. These are typically new files that you have not committed to the repository yet.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;New File&quot; src=&quot;http://i.stack.imgur.com/RMTXE.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A versioned file that needs to be added to the remote repository. These are typically files you have either renamed, or moved to a different directory.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Deleted File&quot; src=&quot;http://i.stack.imgur.com/NS1OG.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A deleted folder. These are folders that you have deleted locally without yet committing the changes to the repository. Note that files are usually removed from the view when they&#39;re deleted locally, so they are normally not seen with this icon.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Synchronized File&quot; src=&quot;http://i.stack.imgur.com/iee2g.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file with no local changes.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Local Changes&quot; src=&quot;http://i.stack.imgur.com/jS8wu.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file with local, uncommitted changes.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Locked File&quot; src=&quot;http://i.stack.imgur.com/kioVk.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A&amp;nbsp;&lt;a href=&quot;http://svnbook.red-bean.com/en/1.5/svn.advanced.locking.html&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4a6b82; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot;&gt;locked&lt;/a&gt;&amp;nbsp;file.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Needs Lock&quot; src=&quot;http://i.stack.imgur.com/x6p5N.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that needs a lock to be edited. These are typically files that cannot easily be merged (i.e. binary files), but may have many editors. A file needs a lock when its&amp;nbsp;&lt;code style=&quot;background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1px; padding-left: 5px; padding-right: 5px; padding-top: 1px; vertical-align: baseline;&quot;&gt;svn:needs-lock&lt;/code&gt;&amp;nbsp;property is set, and Subversion will attempt to make these files read-only in the file system to enforce proper lock negotation.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Conflicted File&quot; src=&quot;http://i.stack.imgur.com/HyV5B.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- &lt;span style=&quot;color: red;&quot;&gt;A conflicted file&lt;/span&gt;. These are typically files that had a commit/update conflict that you marked to resolve later.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Tree Conflicted File&quot; src=&quot;http://i.stack.imgur.com/m3v8P.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- &lt;span style=&quot;color: red;&quot;&gt;A file that has a tree conflict.&lt;/span&gt; These are typically files that have local changes, but have since been &lt;span style=&quot;color: red;&quot;&gt;moved, removed, or renamed&lt;/span&gt; in the repository since the last local copy update.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;External File&quot; src=&quot;http://i.stack.imgur.com/tIRZZ.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that is external to the project. Linked external files cannot be committed to the repository.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Switched File&quot; src=&quot;http://i.stack.imgur.com/QhHYs.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that has been&amp;nbsp;&lt;a href=&quot;http://svn.haxx.se/subusers/archive-2007-06/0052.shtml&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4a6b82; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot;&gt;switched&lt;/a&gt;. These are files which belongs to a different working copy than their local parent directory.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;In a synchronization view (e.g. via&amp;nbsp;&lt;em style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Synchronize with Repository&lt;/em&gt;&amp;nbsp;or&amp;nbsp;&lt;em style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Commit&lt;/em&gt;), as previously described, there are icons which indicate which direction a change is occurring in as well as additional information about that change. These are described below:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;div style=&quot;line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Outgoing&lt;/strong&gt;&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Commit Changes&quot; src=&quot;http://i.stack.imgur.com/BGt41.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file whose contents have been modified and will be committed to the repository.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Commit Addition&quot; src=&quot;http://i.stack.imgur.com/RO2hZ.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that will be newly added to the repository. This may coincide with a file removal in cases where a file is moved or renamed..&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Commit Removal&quot; src=&quot;http://i.stack.imgur.com/01aZm.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that will be &lt;span style=&quot;color: red;&quot;&gt;removed from the repository&lt;/span&gt;. This may coincide with a file addition in cases where a file is moved or renamed.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Property Change&quot; src=&quot;http://i.stack.imgur.com/CeV6D.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- &lt;span style=&quot;color: red;&quot;&gt;A file with&amp;nbsp;&lt;a href=&quot;http://svnbook.red-bean.com/nightly/en/svn.advanced.props.html&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot;&gt;property changes&lt;/a&gt;, in the Commit dialog. On the Synchronize tab, property changes are currently reflected as a normal file modification (&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Commit Changes&quot; src=&quot;http://i.stack.imgur.com/BGt41.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;在上次commit後, 部份屬性有變動&lt;br /&gt;由合併的目錄, 會記錄合併後相關訊息(svn:mergeinfo)&lt;br /&gt;以trunk合併branch情境來看&lt;br /&gt;假設 trunk/WebContent merge branch/WebContent&lt;br /&gt;原本上次合併是由 100 ~ 120, 目前最新版本是121, 合併後也會記錄一個版本, 所以會變成122, 那麼mergeinfo這檔案就是記錄100 ~ 122版本, 但重點是我們還沒有commit&lt;br /&gt;所以此訊息會提示, 我們上次commit是100 ~ 120, 合併後版本變成 100 ~ 122, 它希望我們能commit這版本&lt;br /&gt;為了要記錄這次合併的版本, 所做的提示(因為我們可能在下一階又commit其他變動)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Incoming&lt;/strong&gt;&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Remote Changes&quot; src=&quot;http://i.stack.imgur.com/3XXOX.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that has content changes committed to the repository that will be applied to the local copy.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Pull Addition&quot; src=&quot;http://i.stack.imgur.com/PVH4L.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A new file that will be added to the local copy from the repository. Like the outgoing file addition, this may be the result of a move or rename.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Pull Removal&quot; src=&quot;http://i.stack.imgur.com/OJme5.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- A file that will be removed from the local copy because it has been removed from the repository. Like the outgoing file removal, this may be the result of a move or rename.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Conflict&lt;/strong&gt;&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Conflicting Versions&quot; src=&quot;http://i.stack.imgur.com/9wrQQ.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- &lt;span style=&quot;color: red;&quot;&gt;A file that has been changed in both the local copy and repository independently, causing a need for conflict resolution. Fixing this condition involves opening up the conflict view or forcibly overwriting changes locally or remotely.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Synchronization Tree Conflict&quot; src=&quot;http://i.stack.imgur.com/KwULa.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- &lt;span style=&quot;color: red;&quot;&gt;A file that has a&amp;nbsp;&lt;a href=&quot;http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot;&gt;tree conflict&lt;/a&gt;. This can occur when there are new changes to a file on one end (either local or remote), and the file is moved, removed, or renamed on the other.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Finally, the&amp;nbsp;&lt;em style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;Synchronize with Repository&lt;/em&gt;&amp;nbsp;option opens the Synchronize tab (&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Synchronize Tab&quot; src=&quot;http://i.stack.imgur.com/lPBhk.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;) with the following buttons:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Synchronize Source&quot; src=&quot;http://i.stack.imgur.com/zY07z.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Synchronizes the local copy with the currently selected repository when clicked. Selecting from the drop-down allows switching between different remote code bases.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Show Incoming&quot; src=&quot;http://i.stack.imgur.com/Inal5.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Shows only incoming changes (remote → local).&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Show Outgoing&quot; src=&quot;http://i.stack.imgur.com/PKM5L.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Shows only outgoing changes (local → remote).&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Show Incoming and Outgoing&quot; src=&quot;http://i.stack.imgur.com/bdp8P.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Shows both incoming and outgoing changes (remote ↔ local).&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Show Conflicts&quot; src=&quot;http://i.stack.imgur.com/EyWVU.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Shows conflicting changes.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Update Incoming&quot; src=&quot;http://i.stack.imgur.com/brjg1.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Updates all local resources with incoming changes after prompt.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Commit Outgoing&quot; src=&quot;http://i.stack.imgur.com/e42Oa.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Brings up the commit dialog to commit all outgoing changes.&lt;br /&gt;&lt;sub style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; position: relative; top: 0.3em; vertical-align: baseline;&quot;&gt;&lt;img alt=&quot;Show Changesets&quot; src=&quot;http://i.stack.imgur.com/nhsqV.png&quot; style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-width: 640px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; /&gt;&lt;/sub&gt;&amp;nbsp;- Breaks up the change lists by revisions.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;--&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conflict&lt;/b&gt;&lt;br /&gt;Delete:只要是目錄有變動, 都算是&lt;br /&gt;Add:&lt;br /&gt;Edit:&lt;br /&gt;Local:本機修改&lt;br /&gt;Incoming:是别人修改, 你要Update或Merge進来&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;b style=&quot;background-color: white;&quot;&gt;Tree Conflict&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;update情況&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Local delete, incoming edit upon update&lt;br /&gt;Local edit, incoming delete upon update&lt;br /&gt;Local delete, incoming delete upon update (二邊都刪掉, 直接標記解決就行)&lt;br /&gt;&lt;br /&gt;merge情況&lt;br /&gt;Local missing, incoming edit upon merge&lt;br /&gt;Local edit, incoming delete upon merge (當trunk合併branch, 若trunk修改此檔案, 但trunk刪除時)&lt;br /&gt;Local add, incoming add upon merge (當branch回trunk, 若truck已有此檔案, 但trunk也新增)&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div style=&quot;background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline; word-wrap: break-word;&quot;&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;測試:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small; line-height: normal;&quot;&gt;Local delete, incoming edit upon update&lt;/span&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJBrJUervV7_XAYaiatF8VU-KFdV8mdhrFR5euHlXlFDs2zay691oyJ0YjsyYReyMKlA_N6hEuRTYy6V9O1ohZLIgZ7NbFQuE7W103RDJtrQVyOaXv4kLZG5T8CaeVY6WdWiI0LSLMuluv/s1600/6.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJBrJUervV7_XAYaiatF8VU-KFdV8mdhrFR5euHlXlFDs2zay691oyJ0YjsyYReyMKlA_N6hEuRTYy6V9O1ohZLIgZ7NbFQuE7W103RDJtrQVyOaXv4kLZG5T8CaeVY6WdWiI0LSLMuluv/s640/6.PNG&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZgQeOUarqcMNUaDqZGzLXK0P6bNB_LrGBDygBclmOSVLBHv7eXvZH2zTt0io6Bc7TpTYw-5vq5btoF2v3oRDACaPx0Vx8957ENFsfEi-Um0LYvl5YdTq8hvRZUphEr5RcHv55i4L_5vq9/s1600/7.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;558&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZgQeOUarqcMNUaDqZGzLXK0P6bNB_LrGBDygBclmOSVLBHv7eXvZH2zTt0io6Bc7TpTYw-5vq5btoF2v3oRDACaPx0Vx8957ENFsfEi-Um0LYvl5YdTq8hvRZUphEr5RcHv55i4L_5vq9/s640/7.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIujsUxPQfX_FJKBJfkllfj22-OO2Gwj0d9uy6ZVyUsICEloWsmJaxfMkNNBsev0plCITQhetSC19IXG11U4B6CAo0H_64Qn2pWX68UWpf5wAMgwPNrpChvPt_QZXrExTvdep3zm_SEWrz/s1600/8.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;492&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIujsUxPQfX_FJKBJfkllfj22-OO2Gwj0d9uy6ZVyUsICEloWsmJaxfMkNNBsev0plCITQhetSC19IXG11U4B6CAo0H_64Qn2pWX68UWpf5wAMgwPNrpChvPt_QZXrExTvdep3zm_SEWrz/s640/8.PNG&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: small; text-align: left;&quot;&gt;最好是每次合併後, 都檢查一下是否有 Tree Conflict, 因為不是每次都有提示&lt;/span&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-size: 14px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Arial, &#39;Liberation Sans&#39;, &#39;DejaVu Sans&#39;, sans-serif; font-size: 14px; line-height: 18px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/4025271722199334465/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/4025271722199334465' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4025271722199334465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4025271722199334465'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2012/03/subclipse.html' title='Subclipse'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0w21vwnQknzz_wb6KdrjEWjESFD3dnmbkEFu63bvmhPG2Kjg49pFjIvMgxfwcOGhlMwNYejwjG9e9qH0pZT3LTjFLcgNP4j3ZkvwBSTdkC6lU7H2IUmgptAHB8rPd4joa7dC8qKuwwH5a/s72-c/svn2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-2090631210147847603</id><published>2012-02-22T10:14:00.000+08:00</published><updated>2012-02-22T10:15:14.240+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Criteria</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;分頁&lt;/b&gt;&lt;br /&gt;
@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;
public List&lt;user&gt; listByUserIdAndState(int userId, int state, int first, int size) {&lt;/user&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;state&quot;, state));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;criteria.setFirstResult(first);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; criteria.setMaxResults(size);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; return criteria.list();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;排序&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;
public List&lt;user&gt; listByUserIdAndState(int userId, int state, int first, int size) {&lt;/user&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;state&quot;, state));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;criteria.addOrder(Order.desc(&quot;updateTime&quot;));&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.setFirstResult(first);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.setMaxResults(size);&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; return criteria.list();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;使用add()方法加入條件時, 預設是使用and來組合條件, 若要用or&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;criteria.add(Restrictions.or(&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Restrictions.eq(&quot;state&quot;,&amp;nbsp;
new Integer(1)&amp;nbsp;),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Restrictions.isNull(&quot;state&quot;)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return criteria.list();&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Like&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.like(&quot;phone&quot;, &quot;%&quot; + phone + &quot;%&quot;));&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; return criteria.list();
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Restrictions &lt;/b&gt;&lt;span style=&quot;color: red; font-family: 楷体_GB2312;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Restrictions.eq&lt;br /&gt;
Restrictions.allEq (參數為map)&lt;br /&gt;
Restrictions.gt&lt;br /&gt;
Restrictions.ge&lt;br /&gt;
Restrictions.lt&lt;br /&gt;
Restrictions.le&lt;br /&gt;
Restrictions.between&lt;br /&gt;
Restrictions.like&lt;br /&gt;
Restrictions.in&lt;br /&gt;
Restrictions.and&lt;br /&gt;
Restrictions.or&lt;br /&gt;
Restrictions.isNull&lt;br /&gt;
Restrictions.isNotNull&lt;br /&gt;
Restrictions.sqlRestriction&lt;br /&gt;
Order.asc&lt;br /&gt;
Order.descMatchMode.EXACT &amp;nbsp;= &quot;like &#39;value&#39;&quot;&lt;br /&gt;
MatchMode.ANYWHERE = &quot;like &#39;%value%&#39;&quot;&lt;br /&gt;
MatchMode.START = like &#39;value%&#39;&quot;&lt;br /&gt;
MatchMode.END = &quot;like &#39;%value&#39;&quot;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Disjunction&amp;nbsp;&lt;/b&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Criterion phoneCriterion = Restrictions.like(&quot;phone&quot;, phone, MatchMode.ANYWHERE);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Criterion mobileCriterion = Restrictions.like(&quot;mobile&quot;, mobile, MatchMode.ANYWHERE);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;Disjunction disjunction = Restrictions.disjunction();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; disjunction.add(phoneCriterion);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; disjunction.add(mobileCriterion);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; criteria.add(disjunction);&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;return criteria.list();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Count&lt;/b&gt;&lt;br /&gt;
public int countByUserIdAndState(int userId, int state) {&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;state&quot;, state));&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;criteria.setProjection(Projections.rowCount());&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;&amp;nbsp;return (Integer) criteria.uniqueResult();&lt;/span&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;group by&lt;/b&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ProjectionList projectionList = Projections.projectionList();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: red;&quot;&gt;projectionList.add(Projections.groupProperty(&quot;area&quot;), &quot;area&quot;);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; projectionList.add(Projections.rowCount(), &quot;userId&quot;); &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; criteria.setProjection(projectionList);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return criteria.list();&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;回傳結果&lt;/b&gt;&lt;br /&gt;
public List&amp;lt;HashMap&amp;lt;String, Integer&amp;gt;&amp;gt; listUser(int userId) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; ProjectionList projectionList = Projections.projectionList();&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; projectionList.add(Projections.groupProperty(&quot;area&quot;), &quot;area&quot;); &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; projectionList.add(Projections.rowCount(), &quot;userId&quot;); &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; Criteria criteria = ss.createCriteria(User.class);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; criteria.add(Restrictions.eq(&quot;userId&quot;, userId));&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; criteria.setProjection(projectionList);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; return criteria.list();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Example 用目前的物件查詢&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
User user = new User();&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
user.setAge(new Integer(30));&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Criteria criteria = session.createCriteria(User.class);&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: red;&quot;&gt;criteria.add(Example.create(user));&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
List users = criteria.list(); &lt;br /&gt;
&lt;br /&gt;Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=?) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;sqlRestriction&amp;nbsp; -&amp;nbsp;直接下SQL&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
Criteria criteria = session.createCriteria(User.class);  &lt;br /&gt;criteria.add(Restrictions.sqlRestriction(  &lt;br /&gt;&quot;{alias}.name LIKE (?)&quot;, &quot;todd%&quot;, Hibernate.STRING));  &lt;br /&gt;List users = criteria.list(); &lt;br /&gt;&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;HQL&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
String hql = &quot;select * from user&quot;;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Query query = session.createQuery(hql);&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
list = query.list();&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/2090631210147847603/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/2090631210147847603' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2090631210147847603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/2090631210147847603'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2012/02/criteria.html' title='Criteria'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-7291978631893805301</id><published>2011-10-13T10:50:00.002+08:00</published><updated>2011-10-13T10:50:23.270+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JQuery"/><title type='text'>jquery 1.3 mouseleave event, trigger select option</title><content type='html'>jquery 1.3 mouseleave event, trigger select option&lt;br /&gt;

&lt;br /&gt;

這是bug嗎? 若綁定mouseleave, 底下若有select tag時, 也會多trigger leave&lt;br /&gt;
&lt;br /&gt;

&lt;br /&gt;
&amp;lt; div class=&quot;move_wrp&quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt; select&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt; option&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt; /select&amp;gt;&lt;br /&gt;
&amp;lt; /div&amp;gt; &lt;br /&gt;
&lt;br /&gt;解決方式&lt;br /&gt;
&lt;br /&gt;

$j(&quot;.move_wrp&quot;).mouseleave(function(e){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((typeof e.fromElement != &#39;undefined&#39; &amp;amp;&amp;amp; !e.fromElement.length) ||&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (typeof e.fromElement == &#39;undefined&#39; &amp;amp;&amp;amp; e.target.tagName != &#39;SELECT&#39;)) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $j(this).hide();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; });</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/7291978631893805301/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/7291978631893805301' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7291978631893805301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7291978631893805301'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2011/10/jquery-13-mouseleave-event-trigger.html' title='jquery 1.3 mouseleave event, trigger select option'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-3703957832266106642</id><published>2010-12-14T11:55:00.001+08:00</published><updated>2010-12-14T11:56:35.041+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><title type='text'>安裝apache, subverion</title><content type='html'>安裝Subverion筆記&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 目標:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; visualsvn 移機&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 再加上修改密碼功能&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 環境:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ubuntu10&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; apache2.2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; php5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Subversion &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.使用samba mount到 VisualSvn&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mount.cifs //xx.xx.xx.xx/SvnRepository /usr/local/SvnRoot -o user=xxx,pass=xxx&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.安裝apache2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install apache2 apache2-common apache2-utils apache2-doc&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 預設裝在 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/apache2/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/apache2/apache2.conf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; root&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /var/www&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.安裝subversion&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install subversion libapache2-svn&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.設定環境, 使用apache2去管理Subversion&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 4.1 文件有提到要使用liunx的group去管理權限 (重要, 才能commit)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo addgroup subversion&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo usermod -G subversion -a www-data&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo chown -R root:subversion myproject&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo chown -R www-data:www-data /var/local/svnroot&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt; 授予 Apache(www-data) 使用者存取的權限&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/group&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 4.2 初始化一個repository &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo svnadmin create /usr/local/SvnRoot&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 4.3 修改dav_svn.conf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo vi /etc/apache2/mods-available/dav_svn.conf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;location svn=&quot;&quot;&gt; --&amp;gt; 此路徑底下的文件生效&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DAV svn&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #SVNParentPath /mnt/SvnRepository &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SVNParentPath /usr/local/SvnRoot&lt;/location&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt; SVNPath指Subversion的檔案庫路徑,SVNParentPath指此路徑底下所有目錄&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 都會是Subversion檔案庫&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthType Basic&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthName &quot;Agenda eSolution Java Dept Subversion repository&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthUserFile /etc/subversion/passwd&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthzSVNAccessFile /etc/subversion/authz&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Require valid-user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #SVNAutoversioning on&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 4.4 Subversion 設定文件路徑 /etc/subversion/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 新增Subversion使用者&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo htpasswd /etc/subversion/passwd todd (-c 會砍掉檔案重建)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 新增Subversion權限&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [aliases]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Research Institute/CN=Joe Average&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [groups]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; testgroup=todd&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [svn:/]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; *=&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [test:/]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @agenda= rw&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; todd2= rw&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.SSL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.1 安裝&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install ssl-cert&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.2 Enable the SSL Apache module&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo a2enmod ssl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/apache2/ports.conf &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 應該要有&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;ifmodule mod_ssl.c=&quot;&quot;&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Listen 443 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/ifmodule&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.3 生成一個 SSL證書&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir /etc/apache2/ssl &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.4 修改/etc/apache2/sites-available/default-ssl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 改成產生的路徑&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #SSLCertificateFile&amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/apache/ssl/apache.pem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key ?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.5 修改/etc/apache2/mods-available/dav_svn.conf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;location svn=&quot;&quot;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SSLRequireSSL --&amp;gt; 加入&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/location&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.6 這一步很重要&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo a2ensite default-ssl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/apache2 restart &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.7 根憑證 (Root CA) 作法：&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 建立根憑證的 Private Key:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl genrsa -des3 -out RootCA.key 2048&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 密碼請來問我&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 產生根憑證的申請書:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl req -new -key RootCA.key -out RootCA.req&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; chmod og-rwx RootCA.key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 使用根憑證本身簽髮根憑證:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey RootCA.key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -in RootCA.req -out RootCA.crt&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rm -f RootCA.req&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.8 伺服器憑證作法：&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 建立伺服器憑證的 Private Key:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl genrsa -out HostCA.key 2048&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 產生伺服器憑證的申請書&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl req -new -key HostCA.key -out HostCA.req&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; chmod og-rwx HostCA.key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tip: 在填申請伺服器憑證申請書時 (Common Name) 要填上主機的全名,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不然用client去連subversion時會出現&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; server certificate was missing commonName attribute in subject name的錯誤&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 使用根憑證簽發伺服器憑證&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; openssl x509 -req -days 365 -sha1 -extensions v3_req -CA RootCA.crt&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -CAkey RootCA.key -CAserial RootCA.srl -CAcreateserial -in HostCA.req&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -out HostCA.crt&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rm -f HostCA.req&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.9 修改 vi /etc/apache2/sites-available/default-ssl&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SSLCertificateFile&amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/apache2/ssl/RootCA.crt&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SSLCertificateKeyFile /etc/apache2/ssl/RootCA.key&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tip: 這裡認證的檔案是使用 RootCA的, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 我之前打了HostCA, 會出現&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; svn: OPTIONS of &#39;https://xxxx.xxxx.xxxx.xxxx/svn/xxxx&#39;:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SSL handshake failed: \ SSL error code 01 的錯誤&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.新增修改帳密的 passwd.php&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.1.安裝php5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install php5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install libapache2-mod-php5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.2.新增 /var/www/passwd.php&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.3.修改 /etc/apache2/mods-available/dav_svn.conf, 目的是使用apache來做驗證&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 在apache增加一個Alias, 設定該路徑需要認證, 指定認證的文件為 Subversion&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Alias /svntools &quot;/var/www/&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;directory&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Require valid-user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; # how to authenticate a user&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthType Basic&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthName &quot;Subversion Tools&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AuthUserFile /etc/subversion/passwd&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/directory&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 5.4.修改權限&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; chmod 777 /etc/subversion/passwd&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 最後 restart server時, 會要打上CA憑證的密碼 --&amp;gt; 這裡可以再改成起動時就設, 這部份未處理&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 修改 httpd.conf 加入 ServerName xxxx.xxxx.xxxx.xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 7.改成對外&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 將原本 VisualSVN Server導到 xx.xx.xx.xx:443&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 所以修改 VisualSVN Server\conf\httpd.conf&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 7.1 要打開 #LoadModule ssl_module bin/mod_ssl.so&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;virtualhost *:80=&quot;&quot;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SSLProxyEngine on&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; proxyPass xxx&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProxyPassReverse xxx&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/virtualhost&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/3703957832266106642/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/3703957832266106642' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/3703957832266106642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/3703957832266106642'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/12/subverion-visualsvn-ubuntu10-apache2.html' title='安裝apache, subverion'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-4624881206091718767</id><published>2010-12-14T11:46:00.000+08:00</published><updated>2010-12-14T11:46:12.803+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tomcat"/><title type='text'>安裝tomcat</title><content type='html'>&amp;nbsp;&amp;nbsp;&amp;nbsp; java&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-get install openjdk-6-jdk&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; cd /usr/lib/jvm/java-1.6.0-openjdk/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; tomcat&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; tar xvzf apache-tomcat-6.0.14.tar.gz&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo mv apache-tomcat-6.0.14 /usr/local/tomcat&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; vi /etc/init.d/tomcat&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; export CATALINA_HOME=/usr/local/tomcat&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; export PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /usr/local/tomcat/lib/&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; jtds-1.2.jar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; proxool-0.9.0RC3.jar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; proxool-0.9.1.jar&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; proxool-cglib.jar&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /usr/local/tomcat/conf/content.xml&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;resource auth=&quot;Container&quot;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; factory=&quot;org.logicalcobwebs.proxool.ProxoolDataSource&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name=&quot;jdbc/xxx&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; password=&quot;xxx&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxool.alias=&quot;xxx&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxool.driver-class=&quot;net.sourceforge.jtds.jdbc.Driver&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxool.driver-url=&quot;jdbc:jtds:sqlserver://xx.xx.xx.xx:1433;databaseName=xxx&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proxool.prototype-count=&quot;4&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type=&quot;javax.sql.DataSource&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user=&quot;xxx&quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 目前先copy 到 /usr/local/tomcat/webapps/rbs&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/tomcat start&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sudo /etc/init.d/tomcat restart&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; demo:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; http://xx.xx.xx.xx:8080/xxx/&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/resource&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/4624881206091718767/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/4624881206091718767' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4624881206091718767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4624881206091718767'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/12/tomcat.html' title='安裝tomcat'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-8457215617376281866</id><published>2010-10-15T11:53:00.001+08:00</published><updated>2010-10-15T11:55:46.994+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="prototype"/><title type='text'>prototype</title><content type='html'>$(&#39;xxx&#39;).readAttribute(&#39;xxx&#39;)&lt;br /&gt;
$(&#39;xxx&#39;).writeAttribute(&#39;xxx&#39;)&lt;br /&gt;
&lt;br /&gt;
$(element).show();&lt;br /&gt;
$(element).hide();&lt;br /&gt;
&lt;br /&gt;
$(element).up(&#39;div&#39;)&lt;br /&gt;
$(element).down(&#39;div&#39;)&lt;br /&gt;
&lt;br /&gt;
$(element).select(&#39;div&#39;) //指定選tag&lt;br /&gt;
$(element).getElementsBySelector(&#39;div#xxx&#39;) //可以指定id, 或 input[]&lt;br /&gt;
&lt;br /&gt;
$(element).getElementsBySelector(&#39;xxx&#39;).first() //若回傳是list, 可用 [0], 或 .first() 取element&lt;br /&gt;
&lt;br /&gt;
$(element).each(function (el, index) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$(element).childElements()[0].addClassName(&#39;current&#39;);&lt;br /&gt;
$(element).childElements()[0].removeClassName(&#39;current&#39;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
$(element).setStyle({&#39;display&#39;:&#39;block&#39;});&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
document.observe(&quot;dom:loaded&quot;, function() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $$(&quot;xxx&quot;).each( function(element, index){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; element.observe(&quot;click&quot;,function(pEvent){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } );&lt;br /&gt;
});</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/8457215617376281866/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/8457215617376281866' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/8457215617376281866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/8457215617376281866'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/10/prototype.html' title='prototype'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-1585339583235789521</id><published>2010-10-01T16:51:00.000+08:00</published><updated>2010-10-01T16:51:36.346+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="regex"/><title type='text'>regex 檢查 example</title><content type='html'>&lt;div class=&quot;msgcontent&quot;&gt;     &lt;div class=&quot;msgcontent&quot;&gt; 來源: &lt;a href=&quot;http://tw.myblog.yahoo.com/davidbulll/article?mid=79&amp;amp;prev=277&amp;amp;next=76&quot;&gt;http://tw.myblog.yahoo.com/davidbulll/article?mid=79&amp;amp;prev=277&amp;amp;next=76&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
＜form onsubmit=&quot;return check();&quot;＞&lt;br /&gt;
＜input type=&quot;text&quot; name=&quot;t1&quot;＞&lt;br /&gt;
＜input type=&quot;submit&quot;＞ &lt;br /&gt;
＜/form＞&lt;br /&gt;
＜script language=&quot;javascript&quot;＞ &lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;--------------------------------檢查數字(整數)&lt;/div&gt;&lt;br /&gt;
function check() { &lt;br /&gt;
&amp;nbsp;re = /^\d+$/; &lt;br /&gt;
&amp;nbsp;if (!re.test(document.forms[0].t1.value)) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&quot;欄位不能空白且只允許輸入數字&quot;); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; document.forms[0].t1.focus(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return false; &lt;br /&gt;
&amp;nbsp;} &lt;br /&gt;
&amp;nbsp;return true; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;--------------------------------檢查數字可有小數&lt;/div&gt;&lt;br /&gt;
function check(thisname) { &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;if (isNaN(document.getElementById(thisname).value)) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&quot;欄位不能空白且只允許輸入數字&quot;); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; document.getElementById(thisname).focus(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return false; &lt;br /&gt;
&amp;nbsp;} &lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;--------------------------------檢查是否有填資料&lt;/div&gt;function gbchk(theForm)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; if (theForm.name.value == &quot;&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&quot;請輸入姓名!!&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; theForm.name.focus();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (false);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp; if (theForm.content.value == &quot;&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&quot;請輸入留言內容!!&quot;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; theForm.content.focus();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (false);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; return (true);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
//--&amp;gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;----------------------------------檢查是否為MAIL格式&lt;/div&gt;&lt;span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; re1 = /^([a-zA-Z0-9_\.\-]&lt;a class=&quot;smarterwiki-linkify&quot; href=&quot;mailto:%29+%5C@%28%28[a-zA-Z0-9%5C-]%29+%5C.%29+%28[a-zA-Z0-9]%29+$/;&quot;&gt;)+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;
&amp;nbsp;if (re1.exec(theForm.email.value) == null)&lt;br /&gt;
&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;alert(&quot;你的電子郵件格式不合！&quot;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; theForm.email.focus();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return (false);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
＜/script＞&lt;br /&gt;
&lt;span style=&quot;color: #0000bf;&quot;&gt;----------------------------------檢查日期格式&lt;/span&gt;&lt;br /&gt;
&lt;script language=&quot;JavaScript&quot; type=&quot;text/javascript&quot;&gt;

function dateValidationCheck(str){
&amp;nbsp;&amp;nbsp;&amp;nbsp; var re = new RegExp(&quot;^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; var strDataValue;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var infoValidation = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((strDataValue = re.exec(str)) != null){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = parseFloat(strDataValue[1]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &lt;= 0 || i &gt; 9999){ // 年
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infoValidation = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = parseFloat(strDataValue[2]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &lt;= 0 || i &gt; 12){ // 月
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infoValidation = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = parseFloat(strDataValue[3]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i &lt;= 0 || i &gt; 31){ // 日
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infoValidation = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; infoValidation = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;p&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!infoValidation){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(&#39;請輸入 YYYY/MM/DD 日期格式&#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return infoValidation;
}
&lt;/script&gt;&lt;br /&gt;
--------------------------------------------------------&lt;br /&gt;
&amp;nbsp;＜input name=&quot;Submit2&quot; type=&quot;submit&quot;&amp;nbsp; value=&quot;送出&quot;&amp;nbsp; onclick=&quot;return check()&quot;＞&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/1585339583235789521/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/1585339583235789521' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1585339583235789521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1585339583235789521'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/10/regex-example.html' title='regex 檢查 example'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-1602503983582083510</id><published>2010-04-04T02:24:00.000+08:00</published><updated>2010-04-04T02:24:34.782+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hadoop"/><title type='text'>hadoop 範例練習</title><content type='html'>我的環境: &lt;br /&gt;
cygwin&lt;br /&gt;
hadoop-0.20.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.安裝cygwin, 與必要套件&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
參考&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/&quot;&gt;http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop1/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
其中, 提到以本機來模擬多台server的分散運算的部份&lt;br /&gt;
步驟3, 要讓hadoop-site.xml裡設定的各台server, 能以ssh免密碼方式登入&lt;br /&gt;
我在gen完key後, ssh localhost, 會出現&lt;br /&gt;
ssh connect to host localhost port 22 connection refused&lt;br /&gt;
&lt;br /&gt;
原因是&lt;br /&gt;
要啓用 sshd service&lt;br /&gt;
&lt;br /&gt;
參考&lt;br /&gt;
&lt;a href=&quot;http://www.experts-exchange.com/Software/CYGWIN/Q_23631555.html&quot;&gt;http://www.experts-exchange.com/Software/CYGWIN/Q_23631555.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://cha.homeip.net/blog/archives/2006/04/_winxp_cygwin_s.html&quot;&gt;http://cha.homeip.net/blog/archives/2006/04/_winxp_cygwin_s.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
ssh-host-config , 我都選 yes&lt;br /&gt;
它會在 /etc/ 下產生一些ssh檔案&lt;br /&gt;
這時再試 ssh localhost應該要可以登入了&lt;br /&gt;
&lt;br /&gt;
補充:&lt;br /&gt;
&lt;a href=&quot;http://changyy.pixnet.net/blog/post/25245658&quot;&gt;http://changyy.pixnet.net/blog/post/25245658&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/1602503983582083510/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/1602503983582083510' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1602503983582083510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1602503983582083510'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/04/hadoop.html' title='hadoop 範例練習'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-1348825483209676880</id><published>2010-01-24T23:39:00.002+08:00</published><updated>2010-04-04T01:59:17.274+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation 對映</title><content type='html'>&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_8556.html&quot;&gt;One2OneUnidirectAssociationPk&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_6499.html&quot;&gt;One2OneUnidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_2211.html&quot;&gt;One2OneUnidirectAssociationFk&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_1643.html&quot;&gt;One2OneBidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_6802.html&quot;&gt;One2ManyUnidirectAssociationJoinMember&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_3631.html&quot;&gt;One2ManyUnidirectAssociationFk&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_6922.html&quot;&gt;One2ManyAndMany2OneBidirectAssociation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_3830.html&quot;&gt;One2ManyAndMany2OneBidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_5409.html&quot;&gt;Many2OneUnidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation_24.html&quot;&gt;Many2OneUnidirectAssociationFk&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/hibernate-annotation.html&quot;&gt;Many2ManyUnidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://mmmmtodd.blogspot.com/2010/01/many2manybidirectassociationjoinmember.html&quot;&gt;Many2ManyBidirectAssociationJoin&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;package com.todd;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateAnnotationHelper {
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static SessionFactory sessionFactory;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Throwable ex) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ExceptionInInitializerError(ex);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public static SessionFactory getSessionFactory() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sessionFactory;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void close() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getSessionFactory().close();
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
} 
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/1348825483209676880/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/1348825483209676880' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1348825483209676880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1348825483209676880'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation.html' title='Hibernate Annotation 對映'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-841690606237052673</id><published>2010-01-24T23:27:00.000+08:00</published><updated>2010-02-13T12:35:58.870+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2OneUnidirectAssociationPk</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.OneToOne;&lt;br /&gt;import javax.persistence.PrimaryKeyJoinColumn;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_pk_member&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationPkMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2OneUnidirectAssociationPkSkill skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_name() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_name(String user_name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_name = user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMember_desc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_desc(String member_desc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_desc = member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToOne&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @PrimaryKeyJoinColumn&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2OneUnidirectAssociationPkSkill getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(One2OneUnidirectAssociationPkSkill skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_pk_skill&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationPkSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.讓主鍵對映就行&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2OneUnidirectAssociationPkMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationPkMember member = new One2OneUnidirectAssociationPkMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_name(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMember_desc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationPkSkill skill = new One2OneUnidirectAssociationPkSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setSkill(&quot;ass&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkill(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationPkMember pkMember = (One2OneUnidirectAssociationPkMember) session.get(One2OneUnidirectAssociationPkMember.class, &quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;member desc =&quot; + pkMember.getMember_desc());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/841690606237052673/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/841690606237052673' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/841690606237052673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/841690606237052673'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_24.html' title='Hibernate Annotation One2OneUnidirectAssociationPk'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-7924051282164778106</id><published>2010-01-24T23:26:00.000+08:00</published><updated>2010-02-13T12:35:58.874+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2OneUnidirectAssociationJoin</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.OneToOne;&lt;br /&gt;import javax.persistence.PrimaryKeyJoinColumn;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_join_member&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationJoinMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2OneUnidirectAssociationJoinSkill skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMember_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_id(int member_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_id = member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_name() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_name(String user_name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_name = user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMember_desc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_desc(String member_desc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_desc = member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToOne(optional = true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinTable(name = &quot;one2one_unidirect_association_join_member_skill&quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; joinColumns = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;fk_member_id&quot;, unique = true) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inverseJoinColumns = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;fk_skill_id&quot;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2OneUnidirectAssociationJoinSkill getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(One2OneUnidirectAssociationJoinSkill skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_join_skill&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationJoinSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkill_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill_id(int skill_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill_id = skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.join 的仲介table, 不需有實體bean, 會自己產生&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2OneUnidirectAssociationJoinMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationJoinMember member = new One2OneUnidirectAssociationJoinMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_name(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMember_desc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationJoinSkill skill = new One2OneUnidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setSkill(&quot;ass&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkill(skill);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationJoinMember JoinMember = (One2OneUnidirectAssociationJoinMember) session.get(One2OneUnidirectAssociationJoinMember.class, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;member desc =&quot; + JoinMember.getMember_desc());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/7924051282164778106/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/7924051282164778106' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7924051282164778106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7924051282164778106'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_303.html' title='Hibernate Annotation One2OneUnidirectAssociationJoin'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-5450023357034044733</id><published>2010-01-24T23:22:00.000+08:00</published><updated>2010-02-13T12:35:58.891+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2OneUnidirectAssociationFk</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.OneToOne;&lt;br /&gt;import javax.persistence.PrimaryKeyJoinColumn;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_fk_member&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationFkMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int oid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2OneUnidirectAssociationFkSkill skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;oid&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getOid() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return oid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setOid(int oid) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.oid = oid;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_name() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_name(String user_name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_name = user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMember_desc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_desc(String member_desc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_desc = member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToOne&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;skill_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2OneUnidirectAssociationFkSkill getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(One2OneUnidirectAssociationFkSkill skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_unidirect_association_fk_skill&quot;)&lt;br /&gt;public class One2OneUnidirectAssociationFkSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkill_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill_id(int skill_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill_id = skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class One2OneUnidirectAssociationFkMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationFkMember member = new One2OneUnidirectAssociationFkMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_name(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMember_desc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationFkSkill skill = new One2OneUnidirectAssociationFkSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setSkill(&quot;ots520 fk skill&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkill(skill);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationFkMember TestMember = (One2OneUnidirectAssociationFkMember) session.get(One2OneUnidirectAssociationFkMember.class, 2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneUnidirectAssociationFkSkill unidirectAssociationFkSkill = TestMember.getSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;unidirectAssociationFkSkill=&quot; + unidirectAssociationFkSkill.getSkill());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/5450023357034044733/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/5450023357034044733' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5450023357034044733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/5450023357034044733'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_9439.html' title='Hibernate Annotation One2OneUnidirectAssociationFk'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-7040772508035569917</id><published>2010-01-24T23:12:00.000+08:00</published><updated>2010-02-13T12:35:58.894+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2OneBidirectAssociationJoin</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.OneToOne;&lt;br /&gt;import javax.persistence.PrimaryKeyJoinColumn;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_bidirect_association_join_member&quot;)&lt;br /&gt;public class One2OneBidirectAssociationJoinMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2OneBidirectAssociationJoinSkill skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMember_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_id(int member_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_id = member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_name() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_name(String user_name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_name = user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMember_desc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_desc(String member_desc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_desc = member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToOne(optional = true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinTable(name = &quot;one2one_bidirect_association_join_member_skill&quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; joinColumns = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;fk_member_id&quot;, unique = true) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inverseJoinColumns = { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;fk_skill_id&quot;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2OneBidirectAssociationJoinSkill getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(One2OneBidirectAssociationJoinSkill skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.OneToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2one_bidirect_association_join_skill&quot;)&lt;br /&gt;public class One2OneBidirectAssociationJoinSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2OneBidirectAssociationJoinMember member;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkill_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill_id(int skill_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill_id = skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToOne(optional=true, mappedBy=&quot;skill&quot;) // pointing to Member&#39;s skill field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2OneBidirectAssociationJoinMember getMember() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember(One2OneBidirectAssociationJoinMember member) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member = member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.join 的仲介table, 不需有實體bean, 會自己產生&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2OneBidirectAssociationJoinMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneBidirectAssociationJoinMember member = new One2OneBidirectAssociationJoinMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_name(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMember_desc(&quot;ots520 member desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneBidirectAssociationJoinSkill skill = new One2OneBidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setSkill(&quot;ass&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkill(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill.setMember(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneBidirectAssociationJoinMember JoinMember = (One2OneBidirectAssociationJoinMember) session.get(One2OneBidirectAssociationJoinMember.class, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;member desc =&quot; + JoinMember.getSkill().getSkill_id());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2OneBidirectAssociationJoinSkill JoinSkill = (One2OneBidirectAssociationJoinSkill) session.get(One2OneBidirectAssociationJoinSkill.class, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;member desc =&quot; + JoinSkill.getMember().getMember_desc());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/7040772508035569917/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/7040772508035569917' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7040772508035569917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/7040772508035569917'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_569.html' title='Hibernate Annotation One2OneBidirectAssociationJoin'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-3583244949050631701</id><published>2010-01-24T23:08:00.000+08:00</published><updated>2010-02-13T12:35:58.896+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2ManyUnidirectAssociationJoin</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_unidirect_association_join_member&quot;)&lt;br /&gt;public class One2ManyUnidirectAssociationJoinMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String member_desc;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&lt;one2manyunidirectassociationjoinskill&gt; skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMember_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_id(int member_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_id = member_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_name() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_name(String user_name) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_name = user_name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMember_desc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember_desc(String member_desc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member_desc = member_desc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToMany&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinTable(name = &quot;one2many_unidirect_association_join_member_skill&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; joinColumns = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //@JoinColumn(name=&quot;fk_member_id&quot;, unique = true) //錯的&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_member_id&quot;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inverseJoinColumns = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_skill_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&lt;one2manyunidirectassociationjoinskill&gt; getSkillList() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillList(List&lt;one2manyunidirectassociationjoinskill&gt; skillList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillList = skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_unidirect_association_join_skill&quot;)&lt;br /&gt;public class One2ManyUnidirectAssociationJoinSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkill_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill_id(int skill_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill_id = skill_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUser_id() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUser_id(String user_id) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.user_id = user_id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2ManyUnidirectAssociationJoinMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationJoinMember member = new One2ManyUnidirectAssociationJoinMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUser_name(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMember_desc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyunidirectassociationjoinskill&gt; skillList = new ArrayList&lt;one2manyunidirectassociationjoinskill&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationJoinSkill skill1 = new One2ManyUnidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setUser_id(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setSkill(&quot;ass1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationJoinSkill skill2 = new One2ManyUnidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setUser_id(&quot;ots5202&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setSkill(&quot;ass2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkillList(skillList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationJoinMember JoinMember = (One2ManyUnidirectAssociationJoinMember) session.get(One2ManyUnidirectAssociationJoinMember.class, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinMember == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyunidirectassociationjoinskill&gt; list = JoinMember.getSkillList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (One2ManyUnidirectAssociationJoinSkill one2ManyUnidirectAssociationJoinSkill : list) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;one2ManyUnidirectAssociationJoinSkill=&quot; + one2ManyUnidirectAssociationJoinSkill.getSkill_id());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;/one2manyunidirectassociationjoinskill&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/3583244949050631701/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/3583244949050631701' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/3583244949050631701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/3583244949050631701'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_2629.html' title='Hibernate Annotation One2ManyUnidirectAssociationJoin'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-1425235111686588890</id><published>2010-01-24T23:07:00.000+08:00</published><updated>2010-02-13T12:35:58.900+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2ManyUnidirectAssociationFk</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_unidirect_association_fk_member&quot;)&lt;br /&gt;public class One2ManyUnidirectAssociationFkMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String memberDesc;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&lt;one2manyunidirectassociationfkskill&gt; skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMemberId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberId(int memberId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberId = memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserName(String userName) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userName = userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMemberDesc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberDesc(String memberDesc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberDesc = memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToMany&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name = &quot;member_id&quot;) // watch out!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&lt;one2manyunidirectassociationfkskill&gt; getSkillList() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillList(List&lt;one2manyunidirectassociationfkskill&gt; skillList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillList = skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_unidirect_association_fk_skill&quot;)&lt;br /&gt;public class One2ManyUnidirectAssociationFkSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkillId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillId(int skillId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillId = skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2ManyUnidirectAssociationFkMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationFkMember member = new One2ManyUnidirectAssociationFkMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserName(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMemberDesc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyunidirectassociationfkskill&gt; skillList = new ArrayList&lt;one2manyunidirectassociationfkskill&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationFkSkill skill1 = new One2ManyUnidirectAssociationFkSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setSkill(&quot;skill1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationFkSkill skill2 = new One2ManyUnidirectAssociationFkSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setSkill(&quot;skill2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkillList(skillList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyUnidirectAssociationFkMember JoinMember = (One2ManyUnidirectAssociationFkMember) session.get(One2ManyUnidirectAssociationFkMember.class, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinMember == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyunidirectassociationfkskill&gt; list = JoinMember.getSkillList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (One2ManyUnidirectAssociationFkSkill one2ManyUnidirectAssociationFkSkill : list) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;one2ManyUnidirectAssociationFkSkill=&quot; + one2ManyUnidirectAssociationFkSkill.getSkillId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;/one2manyunidirectassociationfkskill&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/1425235111686588890/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/1425235111686588890' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1425235111686588890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/1425235111686588890'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_6720.html' title='Hibernate Annotation One2ManyUnidirectAssociationFk'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-4950811441814630379</id><published>2010-01-24T23:03:00.000+08:00</published><updated>2010-02-13T12:35:58.903+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2ManyAndMany2OneBidirectAssociation</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_and_many2one_bidirect_association_member&quot;)&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String memberDesc;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&lt;one2manyandmany2onebidirectassociationskill&gt; skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMemberId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberId(int memberId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberId = memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserName(String userName) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userName = userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMemberDesc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberDesc(String memberDesc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberDesc = memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToMany(mappedBy=&quot;member&quot;) // 對應到對方的 field喔 , 不是column name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name=&quot;skill_id&quot;)&amp;nbsp; // inverse=true&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&lt;one2manyandmany2onebidirectassociationskill&gt; getSkillList() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillList(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationskill&gt; skillList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillList = skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_and_many2one_bidirect_association_skill&quot;)&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2ManyAndMany2OneBidirectAssociationMember member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkillId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillId(int skillId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillId = skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @ManyToOne&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;member_id&quot;) // inverse = false , 對應到對方的 id column name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2ManyAndMany2OneBidirectAssociationMember getMember() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember(One2ManyAndMany2OneBidirectAssociationMember member) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member = member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.雙向的話, 只要把One2Many 或 Many2One 對調就行&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationMember member = new One2ManyAndMany2OneBidirectAssociationMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserName(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMemberDesc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationskill&gt; skillList = new ArrayList&lt;one2manyandmany2onebidirectassociationskill&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationSkill skill1 = new One2ManyAndMany2OneBidirectAssociationSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setSkill(&quot;ass1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setMember(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationSkill skill2 = new One2ManyAndMany2OneBidirectAssociationSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setSkill(&quot;ass2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setMember(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkillList(skillList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationMember JoinMember = (One2ManyAndMany2OneBidirectAssociationMember) session.get(One2ManyAndMany2OneBidirectAssociationMember.class, 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinMember == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationskill&gt; list = JoinMember.getSkillList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (One2ManyAndMany2OneBidirectAssociationSkill one2ManyAndMany2OneBidirectAssociationSkill : list) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;one2ManyAndMany2OneBidirectAssociationSkill=&quot; + one2ManyAndMany2OneBidirectAssociationSkill.getSkillId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationSkill JoinSkill = (One2ManyAndMany2OneBidirectAssociationSkill) session.get(One2ManyAndMany2OneBidirectAssociationSkill.class, 4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinSkill == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationMember JoinSkillMember = JoinSkill.getMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;JoinSkillMember=&quot; + JoinSkillMember.getMemberId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;/one2manyandmany2onebidirectassociationskill&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/4950811441814630379/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/4950811441814630379' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4950811441814630379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/4950811441814630379'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_6549.html' title='Hibernate Annotation One2ManyAndMany2OneBidirectAssociation'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5443694850566535151.post-27858806300123884</id><published>2010-01-24T23:01:00.000+08:00</published><updated>2010-02-13T12:35:58.906+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><title type='text'>Hibernate Annotation One2ManyAndMany2OneBidirectAssociationJoin</title><content type='html'>Member&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.persistence.CascadeType;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.OneToMany;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_and_many2one_bidirect_association_join_member&quot;)&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationJoinMember implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String memberDesc;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&lt;one2manyandmany2onebidirectassociationjoinskill&gt; skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getMemberId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberId(int memberId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberId = memberId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_name&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserName() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserName(String userName) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userName = userName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;member_desc&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getMemberDesc() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMemberDesc(String memberDesc) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.memberDesc = memberDesc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToMany&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinTable(name = &quot;one2many_and_many2one_bidirect_association_join_member_skill&quot;,&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; joinColumns = {&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //@JoinColumn(name=&quot;fk_member_id&quot;, unique = true) //若要 1 對 1的話, 加上 unique&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_member_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inverseJoinColumns = {&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_skill_id&quot;)&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @OneToMany(mappedBy = &quot;member&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&lt;one2manyandmany2onebidirectassociationjoinskill&gt; getSkillList() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillList(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationjoinskill&gt; skillList) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillList = skillList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skill&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.io.Serializable;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.GeneratedValue;&lt;br /&gt;import javax.persistence.GenerationType;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;import javax.persistence.JoinColumn;&lt;br /&gt;import javax.persistence.JoinTable;&lt;br /&gt;import javax.persistence.ManyToOne;&lt;br /&gt;import javax.persistence.Table;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = &quot;one2many_and_many2one_bidirect_association_join_skill&quot;)&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationJoinSkill implements Serializable{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private One2ManyAndMany2OneBidirectAssociationJoinMember member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill_id&quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int getSkillId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkillId(int skillId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skillId = skillId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;user_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getUserId() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setUserId(String userId) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.userId = userId;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Column(name = &quot;skill&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getSkill() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setSkill(String skill) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.skill = skill;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @ManyToOne(optional=true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinTable(name = &quot;one2many_and_many2one_bidirect_association_join_member_skill&quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; joinColumns = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_skill_id&quot;, unique = true)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inverseJoinColumns = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @JoinColumn(name=&quot;fk_member_id&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public One2ManyAndMany2OneBidirectAssociationJoinMember getMember() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setMember(One2ManyAndMany2OneBidirectAssociationJoinMember member) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.member = member;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Test&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;package com.todd.bean;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import org.hibernate.Session;&lt;br /&gt;import org.hibernate.SessionFactory;&lt;br /&gt;import org.hibernate.Transaction;&lt;br /&gt;import org.hibernate.cfg.AnnotationConfiguration;&lt;br /&gt;&lt;br /&gt;import junit.framework.TestCase;&lt;br /&gt;&lt;br /&gt;import com.todd.HibernateAnnotationHelper;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* 1.雙向的話, 只要把One2Many 或 Many2One 對調就行&lt;br /&gt;&amp;nbsp;* 2.&lt;br /&gt;&amp;nbsp;* @author Todd&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class One2ManyAndMany2OneBidirectAssociationJoinMyTestCaseA extends TestCase {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void test(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session session = HibernateAnnotationHelper.getSessionFactory().openSession();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Transaction tx = session.beginTransaction();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinMember member = new One2ManyAndMany2OneBidirectAssociationJoinMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setUserName(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setMemberDesc(&quot;ots520 desc&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationjoinskill&gt; skillList = new ArrayList&lt;one2manyandmany2onebidirectassociationjoinskill&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinSkill skill1 = new One2ManyAndMany2OneBidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setSkill(&quot;skill1&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill1.setMember(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinSkill skill2 = new One2ManyAndMany2OneBidirectAssociationJoinSkill();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setUserId(&quot;ots520&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setSkill(&quot;skill2&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skill2.setMember(member);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(skill2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; skillList.add(skill2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; member.setSkillList(skillList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.save(member);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinMember JoinMember = (One2ManyAndMany2OneBidirectAssociationJoinMember) session.get(One2ManyAndMany2OneBidirectAssociationJoinMember.class, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinMember == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;one2manyandmany2onebidirectassociationjoinskill&gt; list = JoinMember.getSkillList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (One2ManyAndMany2OneBidirectAssociationJoinSkill one2ManyAndMany2OneBidirectAssociationJoinSkill : list) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;one2ManyAndMany2OneBidirectAssociationJoinSkill=&quot; + one2ManyAndMany2OneBidirectAssociationJoinSkill.getSkillId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinSkill JoinSkill = (One2ManyAndMany2OneBidirectAssociationJoinSkill) session.get(One2ManyAndMany2OneBidirectAssociationJoinSkill.class, 4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(JoinSkill == null)){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; One2ManyAndMany2OneBidirectAssociationJoinMember JoinSkillMember = JoinSkill.getMember();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(&quot;JoinSkillMember=&quot; + JoinSkillMember.getMemberId());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx.commit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; session.close();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;/one2manyandmany2onebidirectassociationjoinskill&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://toddssl.blogspot.com/feeds/27858806300123884/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5443694850566535151/27858806300123884' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/27858806300123884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5443694850566535151/posts/default/27858806300123884'/><link rel='alternate' type='text/html' href='http://toddssl.blogspot.com/2010/01/hibernate-annotation_1698.html' title='Hibernate Annotation One2ManyAndMany2OneBidirectAssociationJoin'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/04773521914854102924</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>