<?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: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-8475025587762872101</id><updated>2012-01-16T14:49:51.187-08:00</updated><title type='text'>Tadaya's Blog</title><subtitle type='html'>I'd like to share my development experience!!
Let's be happy for software development!!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-3020994836464266802</id><published>2011-06-30T13:05:00.000-07:00</published><updated>2011-06-30T13:48:50.802-07:00</updated><title type='text'>run same command on multiple directories</title><content type='html'>&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I've been working on applications that consist of multiple maven projects.&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Many time, I have to type same commands on multiple project directories, such as "mvn install", "svn up", "git …", etc.&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I wrote a bash script that executes given command(s) on multiple directories.&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Multiple Directory Command&lt;/b&gt;:&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span" style="color: #3206ee;"&gt;&lt;span class="s1" style="text-decoration: underline;"&gt;&lt;a href="https://github.com/ttddyy/utils/tree/master/multi_command"&gt;https://github.com/ttddyy/utils/tree/master/multi_command&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;Sample: &lt;i&gt;(mc is the script alias I use)&lt;/i&gt;&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc svn up &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 up all projects&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc -g projA mvn install &amp;nbsp; &amp;nbsp; # call "mvn install" on porjA group directories(defined in config file)&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc git checkout -b new_branch master &amp;nbsp;# create a new git branch to all project&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc git branch &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# display current git branch in all project&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc -g projA svn up &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # &amp;nbsp;"svn up" projA directories&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp; &amp;gt; mc -g projB -c config_file du -sh &amp;nbsp;# chcek directory size of projB directories&lt;/div&gt;&lt;div class="p2" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1" style="font: normal normal normal 12px/normal Arial; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;please see more options&amp;nbsp;&lt;a href="https://github.com/ttddyy/utils/tree/master/multi_command"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-3020994836464266802?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/3020994836464266802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=3020994836464266802' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3020994836464266802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3020994836464266802'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2011/06/run-same-command-on-multiple.html' title='run same command on multiple directories'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-5861935794114937726</id><published>2010-01-28T21:41:00.000-08:00</published><updated>2010-01-28T21:51:16.452-08:00</updated><title type='text'>datasource-proxy framework</title><content type='html'>--&lt;br /&gt;I'm writing a framework that helps monitoring and debugging query execution from app.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/datasource-proxy/"&gt;[Project Home] &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;- log all database queries with parameter values&lt;br /&gt;- log each query's elapsed time&lt;br /&gt;- log statistics of all database call and total query elapsed time&lt;br /&gt;- provide callback to database call&lt;br /&gt;- provide statistics object &lt;br /&gt;&lt;br /&gt;Database Call Log:&lt;br /&gt;&lt;pre class="box"&gt;Time:10, Num:1, Query:{[insert into emp ( id, name )values (?, ?);][1, foo]}&lt;br /&gt;Time:1, Num:1, Query:{[select this_.id as id0_0_, this_.name as name0_0_, this_.value as value0_0_ from emp this_ where (this_.id=? and this_.name=?)][1,bar]}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Statistics Log:&lt;br /&gt;&lt;pre class="box"&gt;DataSource:MyDatasourceA ElapsedTime:13 Call:7 Query:7 (Select:3 Insert:2 Update:1 Delete:0 Other:1)&lt;br /&gt;DataSource:MyDatasourceB ElapsedTime:1 Call:1 Query:1 (Select:1 Insert:0 Update:0 Delete:0 Other:0)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you are interested,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;project homepage &lt;a href="http://code.google.com/p/datasource-proxy/"&gt;http://code.google.com/p/datasource-proxy/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;download &lt;a href="http://code.google.com/p/datasource-proxy/downloads/list"&gt;http://code.google.com/p/datasource-proxy/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-5861935794114937726?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/5861935794114937726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=5861935794114937726' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5861935794114937726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5861935794114937726'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2010/01/datasource-proxy-framework.html' title='datasource-proxy framework'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-5289289574071241179</id><published>2007-09-03T12:36:00.001-07:00</published><updated>2011-09-12T22:00:44.185-07:00</updated><title type='text'>Hibernate: Association Mappings in Annotation (JPA style)</title><content type='html'>Unidirectional Association&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/02/hibernate-annotation-many-to-oneforeign.html"&gt; many to one &lt;span style="color: #009900; font-style: italic;"&gt;(8.2.1)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-m21"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/03/hibernate-annotation-one-to-oneforeign.html"&gt; one to one (foreign key) &lt;span style="color: #009900; font-style: italic;"&gt;(8.2.2)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/03/hibernate-annotation-one-to-one-primary.html"&gt; one to one (primary key) &lt;span style="color: #009900; font-style: italic;"&gt;(8.2.2)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-many.html"&gt; one to many (foreign key) &lt;span style="color: #009900; font-style: italic;"&gt;(8.2.3)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-12m"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Unidirectional Association with Join Table&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-many-join.html"&gt; one to many &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.3.1&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-12m"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-one-join.html"&gt; many to one &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.3.2&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-m21"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-join.html"&gt; one to one &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.3.3&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many-join.html"&gt; many to many &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.3.4&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-m2m"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Bidirectional Association&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many.html"&gt; one to many / many to one &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.4.1&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-m21"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-foreign.html"&gt; one to one (foreign key) &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.4.2&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-primary.html"&gt; one to one (primary key) &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.4.2&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Bidirectional Association with Join Table&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-manymany-to.html"&gt; one to many / many to one &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.5.1&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-12m"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-manymany-to_03.html"&gt; one to one &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.5.2&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-121"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many-join_03.html"&gt; many to many &lt;span style="color: #009900; font-style: italic;"&gt;(&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;8.5.3&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #009900; font-style: italic;"&gt;    &lt;/span&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-m2m"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;&lt;span style="color: black; font-size: 85%;"&gt;[ref]&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;(*) hibernate document chapter&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;Reference:&lt;br /&gt;- &lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/index.html"&gt;hibernate documentation&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://java.sun.com/products/ejb/docs.html"&gt;EJB 3.0 Spec&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-5289289574071241179?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/5289289574071241179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=5289289574071241179' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5289289574071241179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5289289574071241179'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html' title='Hibernate: Association Mappings in Annotation (JPA style)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-4793504951949937502</id><published>2007-09-03T11:17:00.000-07:00</published><updated>2011-09-12T21:51:53.018-07:00</updated><title type='text'>Hibernate: Annotation many-to-many (join table)</title><content type='html'>Bidirectonal many-to-many (join table) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-m2m"&gt;Hibernate Doc (Chap 8.5.3)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(many) &amp;lt;-&amp;gt; address(many)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;personaddress(personId, addressId)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddresses();&lt;br /&gt;address.getPeople();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  // mapping owner&lt;br /&gt;  @ManyToMany&lt;br /&gt;  @JoinTable(name = "PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }&lt;br /&gt;  )&lt;br /&gt;  private Set&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @ManyToMany(mappedBy="addresses")  // map info is in person class&lt;br /&gt;  private Set&amp;lt;Person&amp;gt; people;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddresses();&lt;br /&gt;select addresses0_.personId as personId1_, addresses0_.addressId as addressId1_, address1_.addressId as addressId3_0_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId where addresses0_.personId=?&lt;br /&gt;&lt;br /&gt;- address.getPeople();&lt;br /&gt;select people0_.addressId as addressId1_, people0_.personId as personId1_, person1_.personId as personId2_0_ from PersonAddress people0_ left outer join PERSON person1_ on people0_.personId=person1_.personId where people0_.addressId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-4793504951949937502?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/4793504951949937502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=4793504951949937502' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4793504951949937502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4793504951949937502'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many-join_03.html' title='Hibernate: Annotation many-to-many (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-7879570078701522164</id><published>2007-09-03T11:16:00.000-07:00</published><updated>2011-09-12T21:52:59.218-07:00</updated><title type='text'>Hibernate: Annotation one-to-one (join table)</title><content type='html'>Bidirectonal one-to-one (join table) association (very unusual)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-121"&gt;Hibernate Doc (Chap 8.5.2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one)(mapping owner) &amp;lt;-&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;personaddress(personId, addressId)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;address.getPerson();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToOne(optional=true)&lt;br /&gt;  @JoinTable(name="PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }     &lt;br /&gt;  )&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToOne(optional=true, mappedBy="address") // pointing to Person's address field&lt;br /&gt;  private Person person;   &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddress();&lt;br /&gt;select person0_.personId as personId2_2_, person0_1_.addressId as addressId3_2_, address1_.addressId as addressId4_0_, address1_1_.personId as personId3_0_, person2_.personId as personId2_1_, person2_1_.addressId as addressId3_1_ from PERSON person0_ left outer join PersonAddress person0_1_ on person0_.personId=person0_1_.personId left outer join ADDRESS address1_ on person0_1_.addressId=address1_.addressId left outer join PersonAddress address1_1_ on address1_.addressId=address1_1_.addressId left outer join PERSON person2_ on address1_1_.personId=person2_.personId left outer join PersonAddress person2_1_ on person2_.personId=person2_1_.personId where person0_.personId=?&lt;br /&gt;&lt;br /&gt;- address.getPerson();&lt;br /&gt;select address0_.addressId as addressId4_2_, address0_1_.personId as personId3_2_, person1_.personId as personId2_0_, person1_1_.addressId as addressId3_0_, address2_.addressId as addressId4_1_, address2_1_.personId as personId3_1_ from ADDRESS address0_ left outer join PersonAddress address0_1_ on address0_.addressId=address0_1_.addressId inner join PERSON person1_ on address0_1_.personId=person1_.personId left outer join PersonAddress person1_1_ on person1_.personId=person1_1_.personId left outer join ADDRESS address2_ on person1_1_.addressId=address2_.addressId left outer join PersonAddress address2_1_ on address2_.addressId=address2_1_.addressId where address0_.addressId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-7879570078701522164?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/7879570078701522164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=7879570078701522164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7879570078701522164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7879570078701522164'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-manymany-to_03.html' title='Hibernate: Annotation one-to-one (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-8819532129420128159</id><published>2007-09-03T11:15:00.000-07:00</published><updated>2011-09-12T21:53:34.015-07:00</updated><title type='text'>Hibernate: Annotation one-to-many/many-to-one (join table)</title><content type='html'>Bidirectonal one-to-many/many-to-one (join table) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-join-12m"&gt;Hibernate Doc (Chap 8.5.1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) &amp;lt;-&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;personAddress(personId, addressId)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;address.getPerson();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToMany&lt;br /&gt;  @JoinTable(name = "PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }&lt;br /&gt;  )&lt;br /&gt;  private Set&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @ManyToOne(optional=true)&lt;br /&gt;  @JoinTable(name = "PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="personId")&lt;br /&gt;    }&lt;br /&gt;  )&lt;br /&gt;  private Person person;   &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddresses();&lt;br /&gt;select addresses0_.personId as personId2_, addresses0_.addressId as addressId2_, address1_.addressId as addressId3_0_, address1_1_.personId as personId4_0_, person2_.personId as personId2_1_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId left outer join PersonAddress address1_1_ on address1_.addressId=address1_1_.addressId left outer join PERSON person2_ on address1_1_.personId=person2_.personId where addresses0_.personId=?&lt;br /&gt;&lt;br /&gt;- address.getPerson();&lt;br /&gt;select address0_.addressId as addressId3_1_, address0_1_.personId as personId4_1_, person1_.personId as personId2_0_ from ADDRESS address0_ left outer join PersonAddress address0_1_ on address0_.addressId=address0_1_.addressId left outer join PERSON person1_ on address0_1_.personId=person1_.personId where address0_.addressId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-8819532129420128159?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/8819532129420128159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=8819532129420128159' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8819532129420128159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8819532129420128159'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-manymany-to.html' title='Hibernate: Annotation one-to-many/many-to-one (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-7598608595166022923</id><published>2007-09-03T11:14:00.000-07:00</published><updated>2011-09-12T21:53:58.172-07:00</updated><title type='text'>Hibernate: Annotation one-to-one (primary-key)</title><content type='html'>Bidirectonal one-to-one (primary-key) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-121"&gt;Hibernate Doc (Chap 8.4.2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) &amp;lt;-&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;address(&lt;u&gt;personId&lt;/u&gt;) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;address.getPerson();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;  &lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name="personId")&lt;br /&gt;  private int id;&lt;br /&gt; &lt;br /&gt;  @OneToOne&lt;br /&gt;  @PrimaryKeyJoinColumn&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToOne(mappedBy="address")  // inverse=true, pointnig Person's address field&lt;br /&gt;  private Person person;   &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddress();&lt;br /&gt;select person0_.personId as personId2_2_, address1_.personId as personId3_0_, person2_.personId as personId2_1_ from PERSON person0_ left outer join ADDRESS address1_ on person0_.personId=address1_.personId left outer join PERSON person2_ on address1_.personId=person2_.personId where person0_.personId=?&lt;br /&gt;&lt;br /&gt;- address.getPerson();&lt;br /&gt;select address0_.personId as personId3_2_, person1_.personId as personId2_0_, address2_.personId as personId3_1_ from ADDRESS address0_ left outer join PERSON person1_ on address0_.personId=person1_.personId left outer join ADDRESS address2_ on person1_.personId=address2_.personId where address0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-7598608595166022923?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/7598608595166022923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=7598608595166022923' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7598608595166022923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7598608595166022923'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-primary.html' title='Hibernate: Annotation one-to-one (primary-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-1876864081921848497</id><published>2007-09-03T11:12:00.000-07:00</published><updated>2011-09-12T21:54:20.198-07:00</updated><title type='text'>Hibernate: Annotation one-to-one (foreign-key)</title><content type='html'>Bidirectonal one-to-one (foreign-key) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-121"&gt;Hibernate Doc (Chap 8.4.2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) &amp;lt;-&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;id&lt;/u&gt;, addressId)&lt;br /&gt;address(&lt;u&gt;id&lt;/u&gt;)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;address.getPerson();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;   &lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name="personId")&lt;br /&gt;  private int id;&lt;br /&gt; &lt;br /&gt;  @ManyToOne&lt;br /&gt;  @JoinColumn(name="addressId")     // inverse = false&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToOne(mappedBy="address")  // inverse=true, pointnig Person's address field&lt;br /&gt;  private Person person;   &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddress();&lt;br /&gt;select person0_.personId as personId2_1_, person0_.addressId as addressId2_1_, address1_.addressId as addressId3_0_ from PERSON person0_ left outer join ADDRESS address1_ on person0_.addressId=address1_.addressId where person0_.personId=?&lt;br /&gt;&lt;br /&gt;- address.getPerson();&lt;br /&gt;select person0_.personId as personId2_1_, person0_.addressId as addressId2_1_, address1_.addressId as addressId3_0_ from PERSON person0_ left outer join ADDRESS address1_ on person0_.addressId=address1_.addressId where person0_.addressId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-1876864081921848497?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/1876864081921848497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=1876864081921848497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1876864081921848497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1876864081921848497'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-foreign.html' title='Hibernate: Annotation one-to-one (foreign-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-444742855720181841</id><published>2007-09-03T11:10:00.000-07:00</published><updated>2011-09-12T21:55:08.210-07:00</updated><title type='text'>Hibernate: Annotation one-to-many/many-to-one</title><content type='html'>Bidirectonal one-to-many/many-to-one association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-bidirectional-m21"&gt;Hibernate Doc (Chap 8.4.1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(many) &amp;lt;-&amp;gt; address(one)&lt;br /&gt;- person A and person B live in address AA&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;, addressId)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;address.getPeople();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;   &lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name="personId")&lt;br /&gt;  private int id;&lt;br /&gt;   &lt;br /&gt;  @ManyToOne&lt;br /&gt;  @JoinColumn(name="addressId")     // inverse = false&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToMany(mappedBy="address")  // pointing Person's address field&lt;br /&gt;  @Column(name="personId")    // inverse=true&lt;br /&gt;  private Set&amp;lt;Person&amp;gt; people;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-444742855720181841?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/444742855720181841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=444742855720181841' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/444742855720181841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/444742855720181841'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many.html' title='Hibernate: Annotation one-to-many/many-to-one'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-8182868399159657636</id><published>2007-09-03T11:08:00.000-07:00</published><updated>2011-09-12T21:55:29.889-07:00</updated><title type='text'>Hibernate: Annotation many-to-many (join table)</title><content type='html'>Unidirectonal many-to-many (join table)) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-m2m"&gt;Hibernate Doc (Chap 8.3.4)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(many) -&amp;gt; address(many)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;personaddress(personId, addressId)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddresses();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @ManyToMany&lt;br /&gt;  @JoinTable(name = "PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }&lt;br /&gt;  )&lt;br /&gt;  private Set&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;}  &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddresses();&lt;br /&gt;&lt;br /&gt;select addresses0_.personId as personId1_, addresses0_.addressId as addressId1_, address1_.addressId as addressId3_0_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId where addresses0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-8182868399159657636?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/8182868399159657636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=8182868399159657636' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8182868399159657636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8182868399159657636'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-many-join.html' title='Hibernate: Annotation many-to-many (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-712009059165823117</id><published>2007-09-03T11:06:00.000-07:00</published><updated>2011-09-12T21:56:14.400-07:00</updated><title type='text'>Hibernate: Annotation one-to-one (join table)</title><content type='html'>Unidirectonal one-to-one (join table) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-121"&gt;Hibernate Doc (Chap 8.3.3)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) -&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person(&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;address(&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;personaddress(personId, addressId)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToOne(optional=true)&lt;br /&gt;  @JoinTable(name="PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }     &lt;br /&gt;  )&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;  &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddress();&lt;br /&gt;&lt;br /&gt;select person0_.personId as personId2_1_, person0_1_.addressId as addressId3_1_, address1_.addressId as addressId4_0_ from PERSON person0_ left outer join PersonAddress person0_1_ on person0_.personId=person0_1_.personId left outer join ADDRESS address1_ on person0_1_.addressId=address1_.addressId where person0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-712009059165823117?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/712009059165823117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=712009059165823117' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/712009059165823117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/712009059165823117'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-one-join.html' title='Hibernate: Annotation one-to-one (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-3796019125987304774</id><published>2007-09-03T11:04:00.000-07:00</published><updated>2011-09-12T21:56:30.313-07:00</updated><title type='text'>Hibernate: Annotation many-to-one (join table)</title><content type='html'>&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-m21"&gt;Hibernate Doc (Chap 8.3.2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(many) -&amp;gt; address(one)&lt;br /&gt;&lt;br /&gt;ex) person A and person B live in address AA&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person (&lt;u&gt;personId&lt;/u&gt;)&lt;br /&gt;addres (&lt;u&gt;addressId&lt;/u&gt;)&lt;br /&gt;personAddress (personId, addressId)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddress();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @ManyToOne(optional=true)&lt;br /&gt;  @JoinTable(name="PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }     &lt;br /&gt;  )&lt;br /&gt;  private Address address;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddress();&lt;br /&gt;&lt;br /&gt;select person0_.personId as personId2_1_,&lt;br /&gt;person0_1_.addressId as addressId3_1_,&lt;br /&gt;address1_.addressId as addressId4_0_&lt;br /&gt;from PERSON person0_ left outer join PersonAddress person0_1_ on person0_.personId=person0_1_.personId&lt;br /&gt;left outer join ADDRESS address1_ on person0_1_.addressId=address1_.addressId&lt;br /&gt;where person0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-3796019125987304774?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/3796019125987304774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=3796019125987304774' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3796019125987304774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3796019125987304774'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-many-to-one-join.html' title='Hibernate: Annotation many-to-one (join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-5718438085642535463</id><published>2007-09-03T11:02:00.000-07:00</published><updated>2011-09-12T21:57:35.324-07:00</updated><title type='text'>Hibernate: Annotation one-to-many( join table)</title><content type='html'>Unidirectonal one-to-many (join table) association&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-join-12m"&gt;Hibernate Doc (Chap 8.3.1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) -&amp;gt; address(many)&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddresses();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "personId")&lt;br /&gt;  private int id;&lt;br /&gt;&lt;br /&gt;  @OneToMany&lt;br /&gt;  @JoinTable(name = "PersonAddress",&lt;br /&gt;    joinColumns = {&lt;br /&gt;      @JoinColumn(name="personId", unique = true)           &lt;br /&gt;    },&lt;br /&gt;    inverseJoinColumns = {&lt;br /&gt;      @JoinColumn(name="addressId")&lt;br /&gt;    }&lt;br /&gt;  )&lt;br /&gt;  private Set&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;  @Id&lt;br /&gt;  @GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;  @Column(name = "addressId")&lt;br /&gt;  private int id;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Generated SQL::&lt;br /&gt;- person.getAddresses();&lt;br /&gt;select addresses0_.personId as personId1_, addresses0_.addressId as addressId1_, address1_.addressId as addressId3_0_ from PersonAddress addresses0_ left outer join ADDRESS address1_ on addresses0_.addressId=address1_.addressId where addresses0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-5718438085642535463?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/5718438085642535463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=5718438085642535463' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5718438085642535463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5718438085642535463'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-many-join.html' title='Hibernate: Annotation one-to-many( join table)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-1647757003730520244</id><published>2007-09-03T10:55:00.000-07:00</published><updated>2011-08-03T23:10:08.975-07:00</updated><title type='text'>Hibernate: Annotation one-to-many (foreign-key)</title><content type='html'>&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-12m"&gt;Hibernate Doc (Chap 8.2.3)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;::Relationship::&lt;br /&gt;person(one) -&amp;gt; address(many)&lt;br /&gt;&lt;br /&gt;::DB Schema::&lt;br /&gt;person( &lt;u&gt;personId&lt;/u&gt; )&lt;br /&gt;address( &lt;u&gt;addressId&lt;/u&gt;, personId )&lt;br /&gt;&lt;br /&gt;::Java Operation::&lt;br /&gt;person.getAddresses();&lt;br /&gt;&lt;br /&gt;::Annotation::&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;@Column(name="personId")&lt;br /&gt;private int id;&lt;br /&gt;&lt;br /&gt;@OneToMany&lt;br /&gt;@JoinColumn(name="personId") &lt;br /&gt;private Set &amp;lt;Address&amp;gt; addresses;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;@Column(name = "addressId")&lt;br /&gt;private int id;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;::Generated SQL (mysql5.0)::&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-1647757003730520244?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/1647757003730520244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=1647757003730520244' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1647757003730520244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1647757003730520244'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/09/hibernate-annotation-one-to-many.html' title='Hibernate: Annotation one-to-many (foreign-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-5898725346989464020</id><published>2007-07-02T13:39:00.000-07:00</published><updated>2007-07-02T17:51:08.127-07:00</updated><title type='text'>Java Collection finder methods(spring &amp; ruby style)</title><content type='html'>Using call-back interface(spring way), I wrote finder methods(block call method in ruby).&lt;br /&gt;I hope this closure-style finding methods provide more human readable sourcecode instead of for-looping.&lt;br /&gt;&lt;br /&gt;I've needed to search object(s) in List. In the first place, I repeated for-loops to get objects and check whether it matches criteria. Unfortunately, it was not clean-looking-sorucecode for me.&lt;br /&gt;&lt;br /&gt;Unfortunately, only final variables are allowed in callback implementation.&lt;br /&gt;&lt;br /&gt;Sample Usage(Junit style)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class SearcherTest {&lt;br /&gt;&lt;br /&gt;    private List&amp;lt;Person&amp;gt; people;&lt;br /&gt;    private Person p1 = new Person("foo", 1);&lt;br /&gt;    private Person p2 = new Person("bar", 2);&lt;br /&gt;    private Person p3 = new Person("baz", 3);&lt;br /&gt;    private CollectionSearcher&amp;lt;Person&amp;gt; searcher;&lt;br /&gt;&lt;br /&gt;    @Before&lt;br /&gt;    public void setUp() {&lt;br /&gt;        people = new ArrayList&amp;lt;Person&amp;gt;();&lt;br /&gt;        people.add(p1);&lt;br /&gt;        people.add(p2);&lt;br /&gt;        people.add(p3);&lt;br /&gt;&lt;br /&gt;        searcher = new CollectionSearcher&amp;lt;Person&amp;gt;(people);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testFind() {&lt;br /&gt;        Person result = searcher.find(new SearchStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public boolean isEqual(Person person) {&lt;br /&gt;                return person.getName().equals("bar");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        assertSame(p2, result);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testFindAll() {&lt;br /&gt;        List&amp;lt;Person&amp;gt; result = searcher.findAll(new SearchStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public boolean isEqual(Person person) {&lt;br /&gt;                return person.getName().startsWith("b");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        assertEquals(2, result.size());&lt;br /&gt;        assertSame(p2, result.get(0));&lt;br /&gt;        assertSame(p3, result.get(1));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testCollect() {&lt;br /&gt;        List&amp;lt;Person&amp;gt; result = searcher.collect(new CollectStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public Person compare(Person person) {&lt;br /&gt;                if (person.getId() &amp;gt; 2) {&lt;br /&gt;                    return person;&lt;br /&gt;                }&lt;br /&gt;                return null;&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        assertEquals(1, result.size());&lt;br /&gt;        assertEquals(3, result.get(0).getId());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testIndexOf() {&lt;br /&gt;        int index = searcher.indexOf(new SearchStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public boolean isEqual(Person person) {&lt;br /&gt;                return person.getName().equals("baz");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        assertEquals(2, index);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Test&lt;br /&gt;    public void testContains() {&lt;br /&gt;        boolean result = searcher.contains(new SearchStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public boolean isEqual(Person person) {&lt;br /&gt;                return person.getName().equals("baz");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;        assertTrue(result);&lt;br /&gt;&lt;br /&gt;        result = searcher.contains(new SearchStrategy&amp;lt;Person&amp;gt;() {&lt;br /&gt;            public boolean isEqual(Person person) {&lt;br /&gt;                return person.getName().equals("foobar");&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;        assertFalse(result);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    static class Person {&lt;br /&gt;        private String name;&lt;br /&gt;        private int id;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        public Person(String name, int id) {&lt;br /&gt;            this.name = name;&lt;br /&gt;            this.id = id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public String getName() {&lt;br /&gt;            return name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void setName(String name) {&lt;br /&gt;            this.name = name;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public int getId() {&lt;br /&gt;            return id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public void setId(int id) {&lt;br /&gt;            this.id = id;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Implemenatation&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class CollectionSearcher&amp;lt;E&amp;gt; {&lt;br /&gt;    private Collection&amp;lt;E&amp;gt; collection;&lt;br /&gt;&lt;br /&gt;    public CollectionSearcher() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public CollectionSearcher(Collection&amp;lt;E&amp;gt; collection) {&lt;br /&gt;        this.collection = collection;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * return the first element that given strategy returns true&lt;br /&gt;     *&lt;br /&gt;     * @param strategy&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public E find(SearchStrategy&amp;lt;E&amp;gt; strategy) {&lt;br /&gt;        for (E entry : collection) {&lt;br /&gt;            if (strategy.isEqual(entry)) return entry;&lt;br /&gt;        }&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * returns all element that given strategy returns true&lt;br /&gt;     *&lt;br /&gt;     * @param strategy&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public List&amp;lt;E&amp;gt; findAll(SearchStrategy&amp;lt;E&amp;gt; strategy) {&lt;br /&gt;        List&amp;lt;E&amp;gt; results = new ArrayList&amp;lt;E&amp;gt;();&lt;br /&gt;        for (E entry : collection) {&lt;br /&gt;            if (strategy.isEqual(entry)) results.add(entry);&lt;br /&gt;        }&lt;br /&gt;        return results;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * return list of elements that strategy returns&lt;br /&gt;     * if strategy returns null, then it won't be in the list&lt;br /&gt;     *&lt;br /&gt;     * @param strategy&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public List&amp;lt;E&amp;gt; collect(CollectStrategy&amp;lt;E&amp;gt; strategy) {&lt;br /&gt;        List&amp;lt;E&amp;gt; results = new ArrayList&amp;lt;E&amp;gt;();&lt;br /&gt;        for (E entry : collection) {&lt;br /&gt;            E result = strategy.compare(entry);&lt;br /&gt;            if (result != null) results.add(result);&lt;br /&gt;        }&lt;br /&gt;        return results;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * returns the first index of element that strategy returns true, or -1 if none of the element satisfies the strategy&lt;br /&gt;     *&lt;br /&gt;     * @param strategy&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public int indexOf(SearchStrategy&amp;lt;E&amp;gt; strategy) {&lt;br /&gt;        int index = 0;&lt;br /&gt;        for (E entry : collection) {&lt;br /&gt;            if (strategy.isEqual(entry)) return index;&lt;br /&gt;            index++;&lt;br /&gt;        }&lt;br /&gt;        return -1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * returns true if the collection has an element that satisfies given strategy&lt;br /&gt;     * @param strategy&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    public boolean contains(SearchStrategy&amp;lt;E&amp;gt; strategy) {&lt;br /&gt;        for (E entry : collection) {&lt;br /&gt;            if (strategy.isEqual(entry)) return true;&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public Collection&amp;lt;E&amp;gt; getCollection() {&lt;br /&gt;        return collection;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setCollection(Collection&amp;lt;E&amp;gt; collection) {&lt;br /&gt;        this.collection = collection;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Search Strategies&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public interface CollectStrategy&amp;lt;T&amp;gt; {&lt;br /&gt;      T compare(T object);    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public interface SearchStrategy&amp;lt;T&amp;gt; {&lt;br /&gt;    /**&lt;br /&gt;     * Returns true if the given object satsfies criteria&lt;br /&gt;     * @param object&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;     boolean isEqual(T object);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-5898725346989464020?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/5898725346989464020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=5898725346989464020' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5898725346989464020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/5898725346989464020'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/07/java-collection-finder-methodsspring.html' title='Java Collection finder methods(spring &amp; ruby style)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-2861481700309529997</id><published>2007-03-22T19:20:00.000-07:00</published><updated>2007-03-22T16:20:55.890-07:00</updated><title type='text'>Performance: clone() vs. new GregorianCalendar()</title><content type='html'>Performance for getting a new Calendar Object&lt;br /&gt;&lt;br /&gt;::Environment::&lt;br /&gt;- JDK "1.6.0" (build 1.6.0-b105)&lt;br /&gt;- Linux (CentOS 4.4)&lt;br /&gt;&lt;br /&gt;::Result::&lt;br /&gt;&lt;table style="width: 466px; height: 70px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;loop&lt;/td&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;by Clone&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;by MilliSec&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;by Setter&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;by Constructor&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;100&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;11ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;11ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;5ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;2ms&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;1000&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;59ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;61ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;9ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;6ms&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;10000&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;85ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;71ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;59ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;19ms&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;30000&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;178ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;136ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;102ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;28ms&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;60000&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;279ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;249ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;189ms&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;42ms&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;::Code::&lt;br /&gt;By Clone&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public long byClone(final int loop) {&lt;br /&gt;  final long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; loop; i++) {&lt;br /&gt;    Calendar cal = (Calendar) Calendar.getInstance().clone();&lt;br /&gt;  }&lt;br /&gt;  final long end = System.currentTimeMillis();&lt;br /&gt;  return end - start;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;By Setting MilliSeconds&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public long byMilliSeconds(final int loop) {&lt;br /&gt;  final Calendar now = Calendar.getInstance();&lt;br /&gt;  final TimeZone tz = now.getTimeZone();&lt;br /&gt;  final long mill = now.getTimeInMillis();&lt;br /&gt;&lt;br /&gt;  final long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; loop; i++) {&lt;br /&gt;    Calendar cal = new GregorianCalendar(tz);&lt;br /&gt;    cal.setTimeInMillis(mill);&lt;br /&gt;  }&lt;br /&gt;  final long end = System.currentTimeMillis();&lt;br /&gt;&lt;br /&gt;  return end - start;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;By Setting Each Field&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public long bySetter(final int loop) {&lt;br /&gt;  final Calendar now = Calendar.getInstance();&lt;br /&gt;  final int currentYear = now.get(Calendar.YEAR);&lt;br /&gt;  final int currentMonth = now.get(Calendar.MONTH);&lt;br /&gt;  final int currentDate = now.get(Calendar.DATE);&lt;br /&gt;  final int currentHour = now.get(Calendar.HOUR);&lt;br /&gt;  final int currentMinute = now.get(Calendar.MINUTE);&lt;br /&gt;  final int currentSecond = now.get(Calendar.SECOND);&lt;br /&gt;  final int currentMilliSecond = now.get(Calendar.MILLISECOND);&lt;br /&gt;  final TimeZone tz = now.getTimeZone();&lt;br /&gt;&lt;br /&gt;  final long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; loop; i++) {&lt;br /&gt;    Calendar cal = new GregorianCalendar(tz);&lt;br /&gt;    cal.set(currentYear, currentMonth, currentDate, currentHour, currentMinute, currentSecond);&lt;br /&gt;    cal.set(Calendar.MILLISECOND, currentMilliSecond);&lt;br /&gt;  }&lt;br /&gt;  final long end = System.currentTimeMillis();&lt;br /&gt;&lt;br /&gt;  return end - start;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;By Constructor&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public long byConstructor(final int loop) {&lt;br /&gt;  final Calendar now = Calendar.getInstance();&lt;br /&gt;  final int currentYear = now.get(Calendar.YEAR);&lt;br /&gt;  final int currentMonth = now.get(Calendar.MONTH);&lt;br /&gt;  final int currentDate = now.get(Calendar.DATE);&lt;br /&gt;  final int currentHour = now.get(Calendar.HOUR);&lt;br /&gt;  final int currentMinute = now.get(Calendar.MINUTE);&lt;br /&gt;  final int currentSecond = now.get(Calendar.SECOND);&lt;br /&gt;  final int currentMilliSecond = now.get(Calendar.MILLISECOND);&lt;br /&gt;  final TimeZone tz = now.getTimeZone();&lt;br /&gt; &lt;br /&gt;  final long start = System.currentTimeMillis();&lt;br /&gt;  for (int i = 0; i &lt; loop; i++) {&lt;br /&gt;    Calendar cal = new GregorianCalendar(currentYear, currentMonth, currentDate, currentHour, currentMinute, currentSecond);&lt;br /&gt;    cal.set(Calendar.MILLISECOND, currentMilliSecond);&lt;br /&gt;    cal.setTimeZone(tz);&lt;br /&gt;  }&lt;br /&gt;  final long end = System.currentTimeMillis();&lt;br /&gt;&lt;br /&gt;  return end - start;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-2861481700309529997?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/2861481700309529997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=2861481700309529997' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/2861481700309529997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/2861481700309529997'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/03/performance-clone-vs-new.html' title='Performance: clone() vs. new GregorianCalendar()'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-6056674335293148023</id><published>2007-03-09T13:29:00.000-08:00</published><updated>2007-03-09T17:57:34.090-08:00</updated><title type='text'>New DI Container from Google</title><content type='html'>Google released their new Dependency Injection container.&lt;br /&gt;- &lt;a href="http://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found it from &lt;a href="http://getahead.org/blog/joe/2007/03/09/a_spring_competitor_from_google.html"&gt;Joe Walker's Blog&lt;/a&gt; and &lt;a href="http://crazybob.org/"&gt;Bob Lee's blog&lt;/a&gt;!!&lt;br /&gt;&lt;br /&gt;Nice to have java5 annotation for DI info!!&lt;br /&gt;At my first glimpse, I feel google's developers like to write everything in source code as you see GWT write codes in Java, instead of writing configuration files.&lt;br /&gt;&lt;br /&gt;Personally, I agree with their approach.&lt;br /&gt;I haven't had experience that a change only requires modifying configuration files and deploy it without compilation.&lt;br /&gt;&lt;br /&gt;My current app uses Spring and configuration files are getting big. Unfortunately I can't say it is clean.(well, there are many ways to deal with it. for example changing loader to read files with our own convention rules)&lt;br /&gt;So, I may feel it's rather convenient writing certain kind of information in source code because we can take advantage of our intelligent IDE.&lt;br /&gt;&lt;br /&gt;In Japan, there is yet another famous DI container called &lt;a href="http://www.seasar.org/en/index.html"&gt;Seasar&lt;/a&gt;. This is also towarding to less configuration files choosing "Convention Over Configuration" rule.&lt;br /&gt;&lt;br /&gt;It's fun to have new DI technologies!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-6056674335293148023?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/6056674335293148023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=6056674335293148023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/6056674335293148023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/6056674335293148023'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/03/new-di-container-from-google.html' title='New DI Container from Google'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-1196704101437892924</id><published>2007-03-08T10:12:00.000-08:00</published><updated>2011-08-03T23:19:13.678-07:00</updated><title type='text'>Hibernate: Annotation one-to-one (primary-key)</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-121"&gt;Hibernate Doc (Chap 8.2.2)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Relationship::&lt;/span&gt;&lt;br /&gt;person(one) -&gt; address(one)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::DB Schema::&lt;/span&gt;&lt;br /&gt;person( &lt;u&gt;personId&lt;/u&gt; )&lt;br /&gt;address( &lt;u&gt;personId&lt;/u&gt; )&lt;br /&gt;* address's primary key is same as person's primary key&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Java Operation::&lt;/span&gt;&lt;br /&gt;person.getAddress();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Annotation::&lt;/span&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;@Column(name="personId")&lt;br /&gt;private int id;&lt;br /&gt;&lt;br /&gt;@OneToOne&lt;br /&gt;@PrimaryKeyJoinColumn&lt;br /&gt;private Address address;&lt;br /&gt;&lt;br /&gt;public Address getAddress() {&lt;br /&gt;return address;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;@Id&lt;br /&gt;@Column(name = "personId")&lt;br /&gt;private int id;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Generated SQL (mysql5.0)::&lt;/span&gt;&lt;br /&gt;- person.getAddress();&lt;br /&gt;select person0_.personId as personId2_2_, address1_.personId as personId3_0_, person2_.personId as personId2_1_ from PERSON person0_ left outer join ADDRESS address1_ on person0_.personId=address1_.personId left outer join PERSON person2_ on address1_.personId=person2_.personId where person0_.personId=?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-1196704101437892924?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/1196704101437892924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=1196704101437892924' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1196704101437892924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/1196704101437892924'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/03/hibernate-annotation-one-to-one-primary.html' title='Hibernate: Annotation one-to-one (primary-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-7142364338127339776</id><published>2007-03-08T09:37:00.000-08:00</published><updated>2011-08-03T23:14:21.825-07:00</updated><title type='text'>Hibernate: Annotation one-to-one(foreign-key)</title><content type='html'>&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-121"&gt;Hibernate Doc (Chap 8.2.2)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Relationship::&lt;/span&gt;&lt;br /&gt;person(one) -&gt; address(one)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::DB Schema::&lt;/span&gt;&lt;br /&gt;person( &lt;u&gt;personId&lt;/u&gt;, addressId )&lt;br /&gt;address( &lt;u&gt;addressId&lt;/u&gt; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Java Operation::&lt;/span&gt;&lt;br /&gt;person.getAddress();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Annotation::&lt;/span&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;@Column(name="personId")&lt;br /&gt;private int id;&lt;br /&gt;&lt;br /&gt;@OneToOne&lt;br /&gt;@JoinColumn(name="addressId")&lt;br /&gt;private Address address;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name = "ADDRESS")&lt;br /&gt;public class Address {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;@Column(name = "addressId")&lt;br /&gt;private int id;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-7142364338127339776?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/7142364338127339776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=7142364338127339776' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7142364338127339776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/7142364338127339776'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/03/hibernate-annotation-one-to-oneforeign.html' title='Hibernate: Annotation one-to-one(foreign-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-4886054054523857621</id><published>2007-02-27T15:53:00.000-08:00</published><updated>2011-08-03T23:13:46.843-07:00</updated><title type='text'>Hibernate: Annotation many-to-one(foreign-key)</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;a href="http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/associations.html#assoc-unidirectional-m21"&gt;Hibernate Doc (Chap 8.2.1)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Relationship::&lt;/span&gt;&lt;br /&gt;person(many) -&gt; address(one)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::DB Schema::&lt;/span&gt;&lt;br /&gt;person( &lt;u&gt;personId&lt;/u&gt;,  addressId )&lt;br /&gt;address( &lt;u&gt;addressId&lt;/u&gt; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Java Operation::&lt;/span&gt;&lt;br /&gt;person.getAddress();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;::Annotation::&lt;/span&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name="PERSON")&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;private int id;&lt;br /&gt;&lt;br /&gt;@ManyToOne&lt;br /&gt;@JoinColumn(name = "ADDRESS_ID")&lt;br /&gt;private Address address;&lt;br /&gt;&lt;br /&gt;public Address getAddress() {&lt;br /&gt;return address;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="box"&gt;@Entity&lt;br /&gt;@Table(name="ADDRESS")&lt;br /&gt;public class Address {   &lt;br /&gt;&lt;br /&gt;@Id&lt;br /&gt;@GeneratedValue(strategy = GenerationType.AUTO)&lt;br /&gt;private int id;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tadtech.blogspot.com/2007/09/hibernate-association-mappings-in.html"&gt;[Association Mapping List]&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-4886054054523857621?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/4886054054523857621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=4886054054523857621' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4886054054523857621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4886054054523857621'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/02/hibernate-annotation-many-to-oneforeign.html' title='Hibernate: Annotation many-to-one(foreign-key)'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-4963000472679984229</id><published>2007-02-15T16:04:00.000-08:00</published><updated>2007-02-15T16:28:58.888-08:00</updated><title type='text'>Hibernate: When is "inverse=true" and when it's not?</title><content type='html'>When I was a hibernate beginner, I was confused about deciding "inverse=true" or "inverse=false".&lt;br /&gt;&lt;br /&gt;Here is an easy way to understanding it:&lt;br /&gt;&lt;br /&gt;example scenario:&lt;br /&gt; Person(one) &amp;lt;-&amp;gt; Address(many)&lt;br /&gt;     * bi-directional one-to-many relationship. (A person has multiple addresses.)&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public class Person {&lt;br /&gt;  private Integer id;&lt;br /&gt;  private Set&amp;lt;Address&amp;gt; addresses;&lt;br /&gt;&lt;br /&gt;  // setter, getter&lt;br /&gt;  Set&amp;lt;Address&amp;gt; getAddresses() { return addresses; }&lt;br /&gt;  ....&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public class Address {&lt;br /&gt;  private Integer id;&lt;br /&gt;  private Person person;&lt;br /&gt;&lt;br /&gt;  // setter, getter&lt;br /&gt;  Person getPerson() { return person; }&lt;br /&gt;  .....&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Person class has "Set&amp;lt;Address&amp;gt; getAddresses()" method&lt;/li&gt;&lt;li&gt;Address class has "Person getPerson()" method&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you think about the relation between two classes, it may gives an idea that person has addresses. (Person -&amp;gt; Addresses)&lt;br /&gt;So, it feels like a person is an owner, and an address is a child. Then, you want to think that address is "inverse=true" because address is owned by person.&lt;br /&gt;However, it's not correct.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here, I'd like to suggest a way to think about it.&lt;br /&gt;&lt;br /&gt;Let's look at table structure instead of classes.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    PERSON[ &lt;em&gt;id&lt;/em&gt;, name, ...]&lt;/li&gt;&lt;li&gt;    ADDRESS[ &lt;em&gt;id&lt;/em&gt;, &lt;span style="color: rgb(255, 102, 102);"&gt;person_id&lt;/span&gt;, city, street,...]&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The &lt;span style="color: rgb(255, 102, 102);"&gt;person_id&lt;/span&gt; column in Address table is the relational information between thease two tables.&lt;br /&gt;So, Address is an owner of the relationship, and Person is the inverse side.&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;inverse=true&lt;/span&gt;" means "&lt;span style="font-weight: bold;"&gt;this side is the inverse side&lt;/span&gt;", and "&lt;span style="font-style: italic;"&gt;inverse=false&lt;/span&gt;" means "this is not the inverse side. this side is the &lt;span style="font-weight: bold;"&gt;owner of the relationship&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Answer is:&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;&amp;lt;class name="Person"&amp;gt;&lt;br /&gt;  &amp;lt;id name="id"&amp;gt;...&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;set name="addresses" &lt;span style="color: rgb(255, 0, 0);"&gt;inverse="true"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;key column="person_id"/&amp;gt;&lt;br /&gt;    &amp;lt;one-to-many class="Address"/&amp;gt;&lt;br /&gt;  &amp;lt;/set&amp;gt;&lt;br /&gt;&amp;lt;/class&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;class name="Address"&amp;gt;&lt;br /&gt;  &amp;lt;id name="id"&amp;gt;...&amp;lt;/id&amp;gt;&lt;br /&gt;  &amp;lt;many-to-one name="person" class="Person" /&amp;gt;&lt;br /&gt;&amp;lt;/class&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In sum, look at the table structure to distinguish "inverse=true" or "inverse=false".&lt;br /&gt;If the table has relational information, then it is the owner side. So, it's not inverse side.(inverse=false)&lt;br /&gt;If the table doesn't have relational information, then it is the inverse side. So, it needs "inverse=true".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-4963000472679984229?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/4963000472679984229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=4963000472679984229' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4963000472679984229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/4963000472679984229'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/02/hibernate-when-is-inversetrue-and-when.html' title='Hibernate: When is &quot;inverse=true&quot; and when it&apos;s not?'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-6427347013279201703</id><published>2007-02-11T21:27:00.000-08:00</published><updated>2007-02-12T15:08:43.614-08:00</updated><title type='text'>Hibernate: Single Shot Query to get Count and Data by ScrollableResults</title><content type='html'>Pagination is one issue when you display list-style data.&lt;br /&gt;Usually it requires two kinds of data: "&lt;span style="font-style: italic;"&gt;certain range of objects&lt;/span&gt;"(offset, limit) and "&lt;span style="font-style: italic;"&gt;total number of data&lt;/span&gt;"(count).&lt;br /&gt;&lt;br /&gt;There is a couple of ways to implement this.&lt;br /&gt;&lt;br /&gt;   (1) Use two queries. one for total number(count) and one for ranged data(offset,limit).&lt;br /&gt;   (2) Load all data into java layer, then check the size of list.&lt;br /&gt;&lt;br /&gt;(2) is not practical if you have large number of data and displaying only a few of them, it has huge overhead.&lt;br /&gt;So, I have seen couple of projects using (1) style to display list of data and total number of them.&lt;br /&gt;&lt;br /&gt;For retrieving ranged data, hibernate provides "&lt;span style="font-style: italic;"&gt;setFetchSize(int)&lt;/span&gt;" and "&lt;span style="font-style: italic;"&gt;setFirstResult(int)&lt;/span&gt;" to specify offset and limit.&lt;br /&gt;This way, application only instantiate ranged return objects.&lt;br /&gt;Also, these two methods separate pagination information from hql and absorbes vendor specific offset and limit SQL.&lt;br /&gt;&lt;br /&gt;For example, HQL that retrieves all active users is :&lt;br /&gt;   "from User where active = true"&lt;br /&gt;you may easily retrieve ranged users from offset 10 to 30, 30 to 50...&lt;br /&gt;&lt;br /&gt;Now you need to retrieve total number of active users in order to display how many pages it has.&lt;br /&gt;For total number of active users, you may use this hql.&lt;br /&gt;  "select (*) from User where active = true"&lt;br /&gt;&lt;br /&gt;Then, how do you manage those almost similar two queries?&lt;br /&gt;&lt;br /&gt;From my experience, some of the applications use string manipulation that dynamically replace or add select clause to HQL statement.&lt;br /&gt;(Adding "select count(*)" is easy to do because hql statement can start with from-clause. )&lt;br /&gt;But replacing may not easy if the hql already has select clause. "select id, name from User where active = true".&lt;br /&gt;You can write some methods to replace it but the source code may not seem neat.&lt;br /&gt;&lt;br /&gt;Some applications prepare two hql statements, one for total number and the other for data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If your JDBC happily supports scrollable result set, here is one way to retrieve count and data by single shot query.&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public ResultList scrollCount(final String hql, final int scrollOffset,&lt;br /&gt;  final int scrollSize) {&lt;br /&gt;    return (ResultList) getHibernateTemplate().execute(&lt;br /&gt;      new HibernateCallback() {&lt;br /&gt;        public Object doInHibernate(Session session)&lt;br /&gt;                throws HibernateException, SQLException {&lt;br /&gt;&lt;br /&gt;          Query q = session.createQuery(hql);&lt;br /&gt;          ScrollableResults rs = q.scroll(ScrollMode.FORWARD_ONLY);&lt;br /&gt;&lt;br /&gt;          rs.beforeFirst();&lt;br /&gt;          rs.scroll(scrollOffset);&lt;br /&gt;&lt;br /&gt;          ResultList resultList = new ResultList();&lt;br /&gt;          for (int i = 0; i &lt; scrollSize &amp;&amp; rs.next(); i++) {&lt;br /&gt;            Object[] results = rs.get();&lt;br /&gt;            // flatten only if one object per row&lt;br /&gt;            resultList.add(results.length == 1 ? results[0]&lt;br /&gt;                  : results);&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          rs.last();&lt;br /&gt;          final int total = rs.getRowNumber() + 1; // start with -1&lt;br /&gt;          resultList.setTotalSize(total);&lt;br /&gt;&lt;br /&gt;          return resultList;&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="box"&gt;&lt;br /&gt;public class ResultList extends ArrayList {&lt;br /&gt;  private int totalSize;&lt;br /&gt;&lt;br /&gt;  public int getTotalSize() {&lt;br /&gt;      return totalSize;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setTotalSize(int totalSize) {&lt;br /&gt;      this.totalSize = totalSize;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can put it into your dao class, probably in generic dao, base dao, abstract dao...&lt;br /&gt;&lt;br /&gt;So, now you don't need to do any string manipulation.&lt;br /&gt;I'm not sure about the cost of moving result set.&lt;br /&gt;But single query can retrieve required two data.&lt;br /&gt;From maintaining source code view, it also reduces duplication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-6427347013279201703?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/6427347013279201703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=6427347013279201703' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/6427347013279201703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/6427347013279201703'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/02/hibernate-single-shot-query-to-get.html' title='Hibernate: Single Shot Query to get Count and Data by ScrollableResults'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-8445489767064890409</id><published>2007-02-09T13:45:00.000-08:00</published><updated>2007-02-09T14:12:12.574-08:00</updated><title type='text'>Hibernate: tune up Named Query initialization time</title><content type='html'>Our application uses Hibernate with many named queries.&lt;br /&gt;Whenever I start up jboss, parsing the named queries is one of the time consuming initialization process.&lt;br /&gt;&lt;br /&gt;I read a post on hibernate JIRA regarding preparing named query.&lt;br /&gt;It says, instead of writing named queries in mapping files, creating named-query-only-files gives faster startup.&lt;br /&gt;&lt;br /&gt;So, I tried it.&lt;br /&gt;&lt;br /&gt;Hiberante3 &amp; Jboss4&lt;br /&gt;Num of NamedQuery: 405&lt;br /&gt;&lt;br /&gt;Named queries exist within entity mapping(our current status):&lt;br /&gt;&lt;br /&gt;&lt;table style="width: 189px; height: 292px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;th&gt;start up time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;1.&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;2m:33s:301ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;2.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt; 2m:15s:737ms &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;3.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:25s:113ms &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;4.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:15s:753ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;5.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m: 1s:706ms &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;6.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m: 2s:941ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;7.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:19s:722ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;8.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m: 8s:769ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;9.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:18s:473ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;10.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:14s: 82ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;AVG&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="color: rgb(255, 0, 0);" align="right"&gt;2m:15s:633ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Moved approximately half of named query to a query-only-file.&lt;br /&gt;(moving all queries takes time, so I just slacked…)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table style="width: 189px; height: 292px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;th&gt;start up time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;1.&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top; text-align: right;"&gt;1m:52s:300ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;2.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m: 7s:191ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;3.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:11s:566ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;4.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m: 7s:581ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;5.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;1m:51s:799ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;6.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:19s:613ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;7.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;1m:49s:612ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;8.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:   :675ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;9.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;1m:58s: 50ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;10.&lt;br /&gt;&lt;/td&gt;&lt;td align="right"&gt;2m:10s:675ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top; text-align: center;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;AVG&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="color: rgb(255, 0, 0);" align="right"&gt;2m: 2s:951ms&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;::Result::&lt;br /&gt;Average start up time : 2m:15s:633ms =&gt; 2m: 2s:951ms&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, start-up time varies. But surely it makes startup faster.&lt;br /&gt;If I move all named-queries to a couple of query-only-files, we will gain more performance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-8445489767064890409?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/8445489767064890409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=8445489767064890409' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8445489767064890409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/8445489767064890409'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/02/hibernate-tune-up-named-query.html' title='Hibernate: tune up Named Query initialization time'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8475025587762872101.post-3348994365987762108</id><published>2007-02-05T22:24:00.000-08:00</published><updated>2007-02-06T10:42:57.513-08:00</updated><title type='text'>Hello World!!</title><content type='html'>Well, here is my first step for my blog.&lt;br /&gt;Who am I?&lt;br /&gt;I'm a software developer who loves to create application very nice and clean.&lt;br /&gt;What makes application nice and clean? My opinion is make its architecture simple and standard.&lt;br /&gt;I have experienced many applications that some guys created with wrong use of technologies.&lt;br /&gt;Accessing database very aggressively in taglib, putting many objects into HttpSession,  giviing HttpRequest object to DAO layers, creating own wicked web action handling framework using opensource web frameworks, and unfortunately more and more...&lt;br /&gt;Well, I'm not always correct but at least let's create maintainable and understandable application, and let's make other developers happy to develop it!!&lt;br /&gt;For this blog, I don't know what kind of topic I'll post yet, but I'm hoping I can share my knowledge to other developers.&lt;br /&gt;Lastly, English is my second language. So, bear with me when my writing sounds awkward!!&lt;br /&gt;Thank you for reading!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8475025587762872101-3348994365987762108?l=tadtech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tadtech.blogspot.com/feeds/3348994365987762108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8475025587762872101&amp;postID=3348994365987762108' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3348994365987762108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8475025587762872101/posts/default/3348994365987762108'/><link rel='alternate' type='text/html' href='http://tadtech.blogspot.com/2007/02/hello-world.html' title='Hello World!!'/><author><name>Tadaya Tsuyu</name><uri>http://www.blogger.com/profile/13171169321033441226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
