﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Colorful Day-随笔分类-ORM</title><link>http://www.blogjava.net/blueoxygen/category/3744.html</link><description>Blue keywords,Green comment,Red breakpoint,my life is also colorful</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 02:44:29 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 02:44:29 GMT</pubDate><ttl>60</ttl><item><title>[导入]Hibernate POJO's good assistant-Commons for Eclipse</title><link>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35581.html</link><dc:creator>BlueO2</dc:creator><author>BlueO2</author><pubDate>Thu, 16 Mar 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35581.html</guid><wfw:comment>http://www.blogjava.net/blueoxygen/comments/35581.html</wfw:comment><comments>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blueoxygen/comments/commentRss/35581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blueoxygen/services/trackbacks/35581.html</trackback:ping><description><![CDATA[    <p><img class="res_image" style="MARGIN: 5px" alt="eclipse" hspace="0" src="http://www.dflying.net/resserver.php?blogId=3&resource=eclipse.gif" align="left" border="0" />POJO used by Hibernate needs to implement hashCode() and equals() method.That's a kind of stuffy work and will be done many many times during development.Some IDEs support automatical generation feature such as IDEA.Eclipse famous plug-in--MyElipse also suppots but it's not free of charge.<br />I think nearly all JAVAers know Apache Commons open source project.We can use Commons lib to generate hashCode() and equals() method.I wanna tell you that there is also a plugin for Eclipse called Commons4E which help you generate hasCode() and equals().<br />It also can generate toString() and compareTo() method.That's a smart plugin.Enjoy it.<a href="http://www.eclipse-plugins.info/eclipse/plugin_details.jsp;jsessionid=9F68F9B4F1ED269AB3E2985D8BCD7503?id=775">Link</a></p><br/>
   <br>文章来源:<a href='http://blueoxygen.dflying.net/3/archive/79_hibernate_pojos_good_assistant-commons_for_eclipse.html'>http://blueoxygen.dflying.net/3/archive/79_hibernate_pojos_good_assistant-commons_for_eclipse.html</a><img src ="http://www.blogjava.net/blueoxygen/aggbug/35581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blueoxygen/" target="_blank">BlueO2</a> 2006-03-16 11:19 <a href="http://www.blogjava.net/blueoxygen/archive/2006/03/16/35581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Hibernate Performance Tuning</title><link>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35579.html</link><dc:creator>BlueO2</dc:creator><author>BlueO2</author><pubDate>Thu, 16 Mar 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35579.html</guid><wfw:comment>http://www.blogjava.net/blueoxygen/comments/35579.html</wfw:comment><comments>http://www.blogjava.net/blueoxygen/archive/2006/03/16/35579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blueoxygen/comments/commentRss/35579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blueoxygen/services/trackbacks/35579.html</trackback:ping><description><![CDATA[    <p><strong><font size="2">Hibernate and Lazy Initialization</font></strong> </p><p><font size="2">Hibernate object relational mapping offers both lazy and non-lazy modes of object initialization. Non-lazy initialization retrieves an object and all of its related objects at load time. This can result in hundreds if not thousands of select statements when retrieving one entity. The problem is compounded when bi-directional relationships are used, often causing entire databases to be loaded during the initial request. Of course one could tediously examine each object relationship and manually remove those most costly, but in the end, we may be losing the ease of use benefit sought in using the ORM tool. </font></p><p><font size="2">The obvious solution is to employ the lazy loading mechanism provided by hibernate. This initialization strategy only loads an object's one-to-many and many-to-many relationships when these fields are accessed. The scenario is practically transparent to the developer and a minimum amount of database requests are made, resulting in major performance gains. One drawback to this technique is that lazy loading requires the Hibernate session to remain open while the data object is in use. This causes a major problem when trying to abstract the persistence layer via the Data Access Object pattern. In order to fully abstract the persistence mechanism, all database logic, including opening and closing sessions, must not be performed in the application layer. Most often, this logic is concealed behind the DAO implementation classes which implement interface stubs. The quick and dirty solution is to forget the DAO pattern and include database connection logic in the application layer. This works for small applications but in large systems this can prove to be a major design flaw, hindering application extensibility.</font> </p><br/><link rel="stylesheet" type="text/css" href="http://blueoxygen.dflying.net/plugins/plogeshi/styles/plogeshi.css" /><p><strong><font size="2">Being Lazy in the Web Layer</font></strong> </p>
<p><font size="2">Fortunately for us, the Spring Framework has developed an out of box web solution for using the DAO pattern in combination with Hibernate lazy loading. For anyone not familiar with using the <a href="http://www.springframework.org/"><font color="#4a664d">Spring Framework</font></a> in combination with <a href="http://www.hibernate.org/"><font color="#4a664d">Hibernate</font></a>, I will not go into the details here, but I encourage you to read <a href="http://www.hibernate.org/110.html"><font color="#4a664d">Hibernate Data Access with the Spring Framework</font></a>. In the case of a web application, Spring comes with both the <a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/OpenSessionInViewFilter.html"><font color="#4a664d">OpenSessionInViewFilter</font></a> and the <a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate/support/OpenSessionInViewInterceptor.html"><font color="#4a664d">OpenSessionInViewInterceptor</font></a>. One can use either one interchangeably as both serve the same function. The only difference between the two is the interceptor runs within the Spring container and is configured within the web application context while the Filter runs in front of Spring and is configured within the web.xml. Regardless of which one is used, they both open the hibernate session during the request binding this session to the current thread. Once bound to the thread, the open hibernate session can transparently be used within the DAO implementation classes. The session will remain open for the view allowing lazy access the database value objects. Once the view logic is complete, the hibernate session is closed either in the Filter doFilter method or the Interceptor postHandle method. Below is an example of the configuration of each component: </font></p>
<p><strong><font size="1">Interceptor Configuration</font></strong> </p>
</p>
<pre class="code"><span class="sc3"><span class="re1">&lt;beans<span class="re2">&gt;</span></span></span> 
  <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">"urlMapping"</span>     
     <span class="re0">class</span>=<span class="st0">"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"</span><span class="re2">&gt;</span></span>    
       <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"interceptors"</span><span class="re2">&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;list<span class="re2">&gt;</span></span></span>
              <span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">bean</span>=<span class="st0">"openSessionInViewInterceptor"</span><span class="re2">/&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;/list<span class="re2">&gt;</span></span></span>
       <span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
       <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"mappings"</span><span class="re2">&gt;</span></span>
  ...
  <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span>
  ...
  <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">name</span>=<span class="st0">"openSessionInViewInterceptor"</span>  
    <span class="re0">class</span>=<span class="st0">"org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor"</span><span class="re2">&gt;</span></span>
       <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"sessionFactory"</span><span class="re2">&gt;</span></span><span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">bean</span>=<span class="st0">"sessionFactory"</span><span class="re2">/&gt;</span></span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
  <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/beans<span class="re2">&gt;</span></span></span>
&nbsp;</pre>
<p>
<p><strong><font size="1">Filter Configuration</font></strong></p>
</p>
<pre class="code"><span class="sc3"><span class="re1">&lt;web</span>-app<span class="re2">&gt;</span></span>
 ...      
  <span class="sc3"><span class="re1">&lt;filter<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;filter</span>-name<span class="re2">&gt;</span></span>hibernateFilter<span class="sc3"><span class="re1">&lt;/filter</span>-name<span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;filter</span>-class<span class="re2">&gt;</span></span>
      org.springframework.orm.hibernate.support.OpenSessionInViewFilter
    <span class="sc3"><span class="re1">&lt;/filter</span>-class<span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;/filter<span class="re2">&gt;</span></span></span>
  ...      
  <span class="sc3"><span class="re1">&lt;filter</span>-mapping<span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;filter</span>-name<span class="re2">&gt;</span></span>hibernateFilter<span class="sc3"><span class="re1">&lt;/filter</span>-name<span class="re2">&gt;</span></span>
     <span class="sc3"><span class="re1">&lt;url</span>-pattern<span class="re2">&gt;</span></span>*.spring<span class="sc3"><span class="re1">&lt;/url</span>-pattern<span class="re2">&gt;</span></span>
  <span class="sc3"><span class="re1">&lt;/filter</span>-mapping<span class="re2">&gt;</span></span>
  ...
<span class="sc3"><span class="re1">&lt;/web</span>-app<span class="re2">&gt;</span></span></pre>
<p>
<p><font size="2">Implementing the Hibernate DAO's to use the open session is simple. In fact, if you are already using the Spring Framework to implement your Hibernate DAO's, most likely you will not have to change a thing. The DAO's must access Hibernate through the convenient HibernateTemplate utility, which makes database access a piece of cake. Below is an example DAO.</font></p>
<p><strong><font size="1">Example DAO</font></font /></strong></p>
</p>
<pre class="code"><span class="kw2">public</span> <span class="kw2">class</span> HibernateProductDAO <span class="kw2">extends</span> HibernateDaoSupport <span class="kw2">implements</span> ProductDAO  <span class="br0">&#123;</span>      
&nbsp;
       <span class="kw2">public</span> Product getProduct<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&bntl=1"><span class="kw3">Integer</span></a> productId<span class="br0">&#41;</span> <span class="br0">&#123;</span>
              <span class="kw2">return</span> <span class="br0">&#40;</span>Product<span class="br0">&#41;</span>getHibernateTemplate<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">load</span><span class="br0">&#40;</span>Product.<span class="me1">class</span>, productId<span class="br0">&#41;</span>;
       <span class="br0">&#125;</span>
&nbsp;
       <span class="kw2">public</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&bntl=1"><span class="kw3">Integer</span></a> saveProduct<span class="br0">&#40;</span>Product product<span class="br0">&#41;</span> <span class="br0">&#123;</span>
              <span class="kw2">return</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&bntl=1"><span class="kw3">Integer</span></a><span class="br0">&#41;</span> getHibernateTemplate<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">save</span><span class="br0">&#40;</span>product<span class="br0">&#41;</span>;
       <span class="br0">&#125;</span>       
&nbsp;
       <span class="kw2">public</span> <span class="kw4">void</span> updateProduct<span class="br0">&#40;</span>Product product<span class="br0">&#41;</span> <span class="br0">&#123;</span>
              getHibernateTemplate<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">update</span><span class="br0">&#40;</span>product<span class="br0">&#41;</span>;
       <span class="br0">&#125;</span>
 <span class="br0">&#125;</span></pre>
<p><p><font size="2"><strong>Being Lazy in the Business Layer</strong> </font></p>
<p><font size="2">Even outside the view, the Spring Framework makes it easy to use lazy load initialization, through the AOP interceptor HibernateInterceptor. The hibernate interceptor transparently intercepts calls to any business object configured in the Spring application context, opening a hibernate session before the call, and closing the session afterward. Let's run through a quick example. Suppose we have an interface BusinessObject:</font> </p>
</p>
<pre class="code"><span class="kw2">public</span> <span class="kw2">interface</span> BusinessObject <span class="br0">&#123;</span> 
     <span class="kw2">public</span> <span class="kw4">void</span> doSomethingThatInvolvesDaos<span class="br0">&#40;</span><span class="br0">&#41;</span>; 
<span class="br0">&#125;</span>&lt;/pre&gt;&lt;p&gt;&lt;font size=<span class="st0">"2"</span>&gt;The <span class="kw2">class</span> BusinessObjectImpl <span class="kw2">implements</span> BusinessObject:&lt;/font&gt;&lt;/p&gt;
&lt;p /&gt;
&lt;pre&gt;public <span class="kw2">class</span> BusinessObjectImpl <span class="kw2">implements</span> BusinessObject <span class="br0">&#123;</span>
    <span class="kw2">public</span> <span class="kw4">void</span> doSomethingThatInvolvesDaos<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="co1">// lots of logic that calls</span>
        <span class="co1">// DAO classes Which access </span>
        <span class="co1">// data objects lazily</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>
<p><p><font size="2">Through some configurations in the Spring application context, we can instruct the HibernateInterceptor to intercept calls to the BusinessObjectImpl allowing it's methods to lazily access data objects. Take a look at the fragment below: </font></p>
</p>
<pre class="code"><span class="sc3"><span class="re1">&lt;beans<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">"hibernateInterceptor"</span> <span class="re0">class</span>=<span class="st0">"org.springframework.orm.hibernate.HibernateInterceptor"</span><span class="re2">&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"sessionFactory"</span><span class="re2">&gt;</span></span>
           <span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">bean</span>=<span class="st0">"sessionFactory"</span><span class="re2">/&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">"businessObjectTarget"</span> <span class="re0">class</span>=<span class="st0">"com.acompany.BusinessObjectImpl"</span><span class="re2">&gt;</span></span>
       <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"someDAO"</span><span class="re2">&gt;</span></span><span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">bean</span>=<span class="st0">"someDAO"</span><span class="re2">/&gt;</span></span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;bean</span> <span class="re0">id</span>=<span class="st0">"businessObject"</span> <span class="re0">class</span>=<span class="st0">"org.springframework.aop.framework.ProxyFactoryBean"</span><span class="re2">&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"target"</span><span class="re2">&gt;</span></span><span class="sc3"><span class="re1">&lt;ref</span> <span class="re0">bean</span>=<span class="st0">"businessObjectTarget"</span><span class="re2">/&gt;</span></span><span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"proxyInterfaces"</span><span class="re2">&gt;</span></span>
           <span class="sc3"><span class="re1">&lt;value<span class="re2">&gt;</span></span></span>com.acompany.BusinessObject<span class="sc3"><span class="re1">&lt;/value<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;property</span> <span class="re0">name</span>=<span class="st0">"interceptorNames"</span><span class="re2">&gt;</span></span>
           <span class="sc3"><span class="re1">&lt;list<span class="re2">&gt;</span></span></span>
              <span class="sc3"><span class="re1">&lt;value<span class="re2">&gt;</span></span></span>hibernateInterceptor<span class="sc3"><span class="re1">&lt;/value<span class="re2">&gt;</span></span></span>
           <span class="sc3"><span class="re1">&lt;/list<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/property<span class="re2">&gt;</span></span></span>
     <span class="sc3"><span class="re1">&lt;/bean<span class="re2">&gt;</span></span></span>            
<span class="sc3"><span class="re1">&lt;/beans<span class="re2">&gt;</span></span></span>
&nbsp;
&nbsp;</pre>
<p>
<p><font size="2">When the businessObject bean is referenced, the HibernateInterceptor opens a hibernate session and passes the call onto the BusinessObjectImpl. When the BusinessObjectImpl has finished executing, the HibernateInterceptor transparently closes the session. The application code has no knowledge of any persistence logic, yet it is still able to lazily access data objects.</font></p>
<p><font size="2"><strong>Being Lazy in your Unit Tests</strong><p><font size="2">Last but not least, we'll need the ability to test our lazy application from J-Unit. This is easily done by overriding the setUp and tearDown methods of the TestCase class. I prefer to keep this code in a convenient abstract TestCase class for all of my tests to extend.</font></p>
</p>
<pre class="code"><span class="kw2">public</span> abstract <span class="kw2">class</span> MyLazyTestCase <span class="kw2">extends</span> TestCase <span class="br0">&#123;</span>
&nbsp;
        <span class="kw2">private</span> SessionFactory sessionFactory;
        <span class="kw2">private</span> Session session;
	
        <span class="kw2">public</span> <span class="kw4">void</span> setUp<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span>
	    super.<span class="me1">setUp</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
	    SessionFactory sessionFactory = <span class="br0">&#40;</span>SessionFactory<span class="br0">&#41;</span> getBean<span class="br0">&#40;</span>\<span class="st0">"sessionFactory&amp;quot&lt;img alt="</span>;<span class="br0">&#41;</span><span class="st0">" src="</span>http:<span class="co1">//www.dflying.net/plugins/smileys/icons/default/wink_smile.gif&quot; /&gt;;</span>
	    session = SessionFactoryUtils.<span class="me1">getSession</span><span class="br0">&#40;</span>sessionFactory, <span class="kw2">true</span><span class="br0">&#41;</span>;
	    Session s = sessionFactory.<span class="me1">openSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
	    TransactionSynchronizationManager.<span class="me1">bindResource</span><span class="br0">&#40;</span>sessionFactory, <span class="kw2">new</span> SessionHolder<span class="br0">&#40;</span>s<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp;
        <span class="br0">&#125;</span>
&nbsp;
        <span class="kw2">protected</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&bntl=1"><span class="kw3">Object</span></a> getBean<span class="br0">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&bntl=1"><span class="kw3">String</span></a> beanName<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="co1">//Code to get objects from Spring application context</span>
        <span class="br0">&#125;</span>
	
        <span class="kw2">public</span> <span class="kw4">void</span> tearDown<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?q=allinurl%3AException+java.sun.com&bntl=1"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span>
	    super.<span class="me1">tearDown</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
	    SessionHolder holder = <span class="br0">&#40;</span>SessionHolder<span class="br0">&#41;</span> TransactionSynchronizationManager.<span class="me1">getResource</span><span class="br0">&#40;</span>sessionFactory<span class="br0">&#41;</span>;
	    Session s = holder.<span class="me1">getSession</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; 
	    s.<span class="me1">flush</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
	    TransactionSynchronizationManager.<span class="me1">unbindResource</span><span class="br0">&#40;</span>sessionFactory<span class="br0">&#41;</span>;
	    SessionFactoryUtils.<span class="me1">closeSessionIfNecessary</span><span class="br0">&#40;</span>s, sessionFactory<span class="br0">&#41;</span>;
        <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre>
<p>
</p>
   <br>文章来源:<a href='http://blueoxygen.dflying.net/3/archive/84_hibernate_performance_tuning.html'>http://blueoxygen.dflying.net/3/archive/84_hibernate_performance_tuning.html</a><img src ="http://www.blogjava.net/blueoxygen/aggbug/35579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blueoxygen/" target="_blank">BlueO2</a> 2006-03-16 11:19 <a href="http://www.blogjava.net/blueoxygen/archive/2006/03/16/35579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate mapping summarize</title><link>http://www.blogjava.net/blueoxygen/archive/2006/02/22/31938.html</link><dc:creator>BlueO2</dc:creator><author>BlueO2</author><pubDate>Wed, 22 Feb 2006 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/blueoxygen/archive/2006/02/22/31938.html</guid><wfw:comment>http://www.blogjava.net/blueoxygen/comments/31938.html</wfw:comment><comments>http://www.blogjava.net/blueoxygen/archive/2006/02/22/31938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blueoxygen/comments/commentRss/31938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blueoxygen/services/trackbacks/31938.html</trackback:ping><description><![CDATA[&nbsp;总结了Hibernate中实体对象与数据的映射方式……图文并茂，配置实例代码，为david吃饱了撑着之大作。<BR><A href="http://static.flickr.com/27/102127089_612ffcc5ab_o.jpg"><IMG src="http://static.flickr.com/27/102127089_612ffcc5ab.jpg?v=0" border=0></A> 
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>1 </SPAN></SPAN><SPAN lang=EN-US>Entity's relation</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>1.1 </SPAN></SPAN><SPAN lang=EN-US>One to One</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">一个</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">对象的一个实例对应另一个对象的一个实例从数据库角度描述，一个表中的一条记录对应另外一个表中唯一一条记录</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public class Image{<BR>private Long id;<BR>private String imgName;<BR>private Blog value; //to store binary of image<BR>......<BR>}<BR>Image.hbm.xml<BR>&lt;class name="Image" dynamic-update="true"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public class Product{<BR>private Long id;<BR>private String name;<BR>private double price;<BR>private Image photo;<BR>}<BR>&lt;class name=...dynamic-update="true" lazy="true"<BR>&lt;id...<BR>&lt;property...<BR>&lt;one-to-one name="photo" class="package.Image" cascade="all" outer-join="auto" constrained="false"/&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>1.2 </SPAN></SPAN><SPAN lang=EN-US>Many to One</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">一个</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">对象对应另一个对象的多个实例，从数据库角度描述，是在一个数据表中的一条记录对应另外一个数据表中对条记录</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">.<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public class PersonalCompute{<BR>private Long computerId;<BR>private String cpu;<BR>......<BR>private Programmer owner;<BR>}<BR>&lt;class name="Programmer" table="Programmer"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;/class&gt;<BR><BR>&lt;class name="PersonalCompute" table="PCS"&gt;<BR>&lt;id....<BR>&lt;property...<BR>&lt;many-to-one name="owner" column="programmerId" class="Programmer"&gt;<BR>&lt;/many-to-one&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>1.3 </SPAN></SPAN><SPAN lang=EN-US>One to Many</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">The same example as Many to One.But we stand at Programmer class's view point.<BR>public class Programmer{<BR>...<BR>private Set computers = new HashSet();<BR>}<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Programmer" table="Programmer"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;set name="computers" <SPAN style="COLOR: red">inverse="true" </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">cascade="all"&gt;<BR>&lt;key column="programmerId" /&gt;<BR>&lt;one-to-many class="PersonalComputers"&gt;<BR>&lt;/one-to-many&gt;<BR>&lt;/set&gt;<O></O></SPAN></P>
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2 </SPAN></SPAN><SPAN lang=EN-US>Collection</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1 </SPAN></SPAN><SPAN lang=EN-US>Map</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Team"&gt;<BR>...<BR>&lt;map name="members"&gt;<BR>&lt;key foreign-key="fk"&gt;<BR>&lt;column name="teamNumber"&gt;<BR>&lt;/key&gt;<BR>&lt;index column="teamRole" type="string"/&gt;<BR>&lt;element column="name" ...<BR>&lt;/map&gt;<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><BR>showcase:<BR>Team team1 = new Team();<BR>team1.setName(xx);<BR>team1.getMembers.put("index","content");<BR>......<BR>sess.save...<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1.1 </SPAN></SPAN><SPAN lang=EN-US>many-to-any</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1.2 </SPAN></SPAN><SPAN lang=EN-US>One to many</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">单单</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">使用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Map</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">做存储往往无法表达复杂的对象</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">,</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">如果要讲对象</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> map</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">进行映射</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">:<BR>One Team,multi-members<BR>Public class Member{<BR>...<BR>private Team team;<BR>}<BR>&lt;class name="Team"&gt;<BR>...<BR>&lt;map name="members" inverse="false"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;index type="string" column="teamRole"/&gt;<BR>&lt;one-to-many class="Member"/&gt;<BR>&lt;/map&gt;<BR>&lt;class name="member"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;many-to-one name="team" /&gt;<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">showcase:<BR>Team team = new Team();<BR>team.setName("xx");<BR>Member mem1 = new Member();<BR>mem1.setXX<BR>mem1.setXX<BR>Member mem2 = new Member();<BR>mem2.setXX<BR>mem2.setXX<BR>team.getMembers().put("xx",mem1);<BR>team.getMembers().put("xx2",mem2);<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1.3 </SPAN></SPAN><SPAN lang=EN-US>many to many</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Team"&gt;<BR>&lt;id<BR>&lt;propery<BR>&lt;map name="members" inverse="false" table="teamHasMembers"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;index type="string" column="teamRole"/&gt;<BR>&lt;many-to-many class="member" outer-join="auto"&gt;<BR>&lt;column name="member"/&gt;<BR>&lt;/many-to-many&gt;<BR>&lt;/map&gt;<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Member"&gt;<BR>&lt;id<BR>&lt;property<BR>&lt;map name="teams" table="memberAtTeams"&gt;<BR>&lt;key....<BR><BR><O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">teamRole is their common key of Map.<BR>Team<O></O></SPAN></P>
<TABLE class=MsoNormalTable style="MARGIN-LEFT: 4.5pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 79.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">id<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 239.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=319>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">name<O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 79.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">2<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 239.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=319>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">team2<O></O></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Member<O></O></SPAN></P>
<TABLE class=MsoNormalTable style="MARGIN-LEFT: 4.5pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 79.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=106>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">di<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 194.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=260>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">name<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 123.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=164>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">age<O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 79.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=106>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">1<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 194.8pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=260>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">davy<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 123.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=164>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">23<O></O></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">memberAtTeams<O></O></SPAN></P>
<TABLE class=MsoNormalTable style="MARGIN-LEFT: 4.5pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 80.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">member<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 80.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">team<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 236.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=316>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">teamRole<O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 80.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">1<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 80.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=107>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">2<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 236.9pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=316>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">coach<O></O></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">teamHasMembers<O></O></SPAN></P>
<TABLE class=MsoNormalTable style="MARGIN-LEFT: 4.5pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">team<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">member<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">teamRole<O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">2<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">1<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 132.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=177>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">coach<O></O></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1.4 </SPAN></SPAN><SPAN lang=EN-US>Composite-index</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">复</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">杂</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Index </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">可以是一个类。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public class Position{<BR>private String role;<BR>private String scene;<BR>public Position()....<BR>getter...<BR>setter...<BR>}<BR>&lt;class name="Team"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;map name="members" inverse="false"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;composite-index class="Position"&gt;<BR>&lt;key-property..<BR>&lt;key-property...<BR>&lt;/composite-index&gt;<BR>&lt;one-to-many class="Member"/&gt;<BR>&lt;/map&gt;<BR>...<BR><BR>&lt;class name="Member"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;many-to-one name="team"/&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MMTopic4><SPAN lang=EN-US>index-many-to-one</SPAN></P>
<P class=MMTopic4><SPAN lang=EN-US>index-many-to-many</SPAN></P>
<P class=MMTopic4><SPAN lang=EN-US>index-many-to-any</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.1.5 </SPAN></SPAN><SPAN lang=EN-US>composite-element</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;import class="Member"/&gt;<BR>&lt;class name="Team"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;map name="members" table="teamMembers"&gt;<BR>&lt;key column="teamId"/&gt;<BR>&lt;index...<BR>&lt;composite-element class="Member"&gt;<BR>&lt;parent name="parent"/&gt;<BR>&lt;property...<BR>&lt;property...<BR>&lt;/composite-element&gt;<BR>&lt;/map&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.2 </SPAN></SPAN><SPAN lang=EN-US>Set</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Team"&gt;<BR>&lt;..<BR>&lt;set name="members" inverse="false"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;elemnet column="name" type="string"/&gt;<BR>&lt;/set&gt;<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.2.1 </SPAN></SPAN><SPAN lang=EN-US>one-to-many</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;set name="xx" column=""&gt;<BR>&lt;key column="" foreign-key="fk"/&gt;<BR>&lt;one-to-many class="BB"/&gt;<BR>&lt;/set&gt;<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.2.2 </SPAN></SPAN><SPAN lang=EN-US>many-to-many</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Team"&gt;<BR>&lt;id..<BR>&lt;property...<BR>&lt;set name="members" inverse="false" table="teamHasMembers"&gt;<BR>&lt;key column="team" foreign-key="fk"&gt;<BR>&lt;many-to-many class="Member" outer-join="auto"&gt;<BR>&lt;column name="member"/&gt;<BR>&lt;/set&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Member"&gt;<BR>&lt;id..<BR>&lt;property...<BR>&lt;set name="members" inverse="true" table="memberAtTeams"&gt;<BR>&lt;key column="member" foreign-key="fk"&gt;<BR>&lt;many-to-many class="Member" outer-join="auto"&gt;<BR>&lt;column name="team"/&gt;<BR>&lt;/set&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.2.3 </SPAN></SPAN><SPAN lang=EN-US>many-to-any</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.2.4 </SPAN></SPAN><SPAN lang=EN-US>composite-element</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.3 </SPAN></SPAN><SPAN lang=EN-US>List</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;list name="members" inverse="false"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;index column="teamMember"/&gt;<BR>&lt;element column="name" type="string"/&gt;<BR>&lt;/list&gt;<O></O></SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.3.1 </SPAN></SPAN><SPAN lang=EN-US>one-to-many</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.3.2 </SPAN></SPAN><SPAN lang=EN-US>many-to-many</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.3.3 </SPAN></SPAN><SPAN lang=EN-US>many-to-many</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.3.4 </SPAN></SPAN><SPAN lang=EN-US>composite-element</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.4 </SPAN></SPAN><SPAN lang=EN-US>Bag</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">It can contains JDK's Collection and List interface type's object.<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.5 </SPAN></SPAN><SPAN lang=EN-US>idBag</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">与</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">bag</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">相比多出了</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">collection-id</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">属性</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;ibdbag name=""&gt;<BR>&lt;collection-id column="mbid" type="long"&gt;<BR>&lt;generator class="<ST1><ST1>hilo</ST1></ST1>"/&gt;<BR>&lt;/collection-id&gt;<BR>&lt;key..<BR>&lt;element..<BR>&lt;/idbag&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>2.6 </SPAN></SPAN><SPAN lang=EN-US>array</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public class Team{<BR>//...<BR>private String[] members;<BR>}<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;array name="members" inverse="false"&gt;<BR>&lt;key column="team" foreign-key="fk"/&gt;<BR>&lt;index column="teamNumber"/&gt;<BR>&lt;element column="name" type="string"/&gt;<BR>&lt;/array&gt;<O></O></SPAN></P>
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>3 </SPAN></SPAN><SPAN lang=EN-US>Component</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Country"&gt;<BR>&lt;id..<BR>&lt;property...<BR>&lt;component name="position"&gt;<BR>&lt;property...<BR>&lt;/component&gt;<BR>Public class Country{<BR>//..<BR>private Position position;<BR>}<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>3.1 </SPAN></SPAN><SPAN lang=EN-US>One-to-one</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>3.2 </SPAN></SPAN><SPAN lang=EN-US>many-to-one</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>3.3 </SPAN></SPAN><SPAN lang=EN-US>dynamic-component</SPAN></P>
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>4 </SPAN></SPAN><SPAN lang=EN-US>Dynamic class</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;dynamic-class entity-name="Country"&gt;<BR>&lt;id name="id" type="long"&gt;<BR>&lt;generator class="<ST1><ST1>hilo</ST1></ST1>"/&gt;<BR>&lt;/id&gt;<BR>&lt;property name="name" column="NAME" type="string"/&gt;<BR>&lt;/..<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>4.1 </SPAN></SPAN><SPAN lang=EN-US>One-to-one</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>4.2 </SPAN></SPAN><SPAN lang=EN-US>many-to-one</SPAN></P>
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>5 </SPAN></SPAN><SPAN lang=EN-US>Mapping type</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>5.1 </SPAN></SPAN><SPAN lang=EN-US>Java type to SQL type</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>5.2 </SPAN></SPAN><SPAN lang=EN-US>3.0 enmu</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>5.3 </SPAN></SPAN><SPAN lang=EN-US>user defined data type</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">need implements org.hibernate.usertype.CompositeUserType or org.hibernate.usertype.UserType interface.<O></O></SPAN></P>
<P class=MMTopic1 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6 </SPAN></SPAN><SPAN lang=EN-US>Class Hierarchy's mapping</SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.1 </SPAN></SPAN><SPAN lang=EN-US>Subclasses are saved in on Table</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.1.1 </SPAN></SPAN><SPAN lang=EN-US>discriminator</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Sapmle:<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Class AbstractParent{<BR>String id;<BR>/*important*/<BR>String discriminator<BR>}<BR>Class ChildA{<BR>String childA;<BR>}<BR>Class ChildB{<BR>String childB;<BR>}<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">=========DB=========<O></O></SPAN></P>
<TABLE class=MsoNormalTable style="MARGIN-LEFT: 4.5pt; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1pt solid; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">colum name<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">data type<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: black 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: black 1pt solid; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: black 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">memo<O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">id<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">varchar<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">childA<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">varchar<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">childB<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">varchar<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P></TD></TR>
<TR>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: 1pt solid; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">class_type<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">varchar<O></O></SPAN></P></TD>
<TD style="BORDER-RIGHT: 1pt solid; PADDING-RIGHT: 4.5pt; BORDER-TOP: medium none; PADDING-LEFT: 4.5pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 190.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: 1pt solid" vAlign=top width=254>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">used to identify subclass:A B<O></O></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">========mapping config file====<BR>&lt;class name="AbstractParent" table="PARENT" abstract="true"&gt;<BR>&lt;id...<BR>&lt;discriminator column="CLASS_TYPE" type="string"/&gt;<BR>&lt;property......<BR>&lt;subclass name="ChildA" discriminator-value="A"&gt;<BR>&lt;property name="childA"/&gt;<BR>&lt;/subclass&gt;<BR>&lt;subclass......<O></O></SPAN></P>
<P class=MMTopic4><SPAN lang=EN-US>id generator</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">increment<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">identity<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">sequence<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><ST1><ST1><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">hilo</SPAN></ST1></ST1><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">seqhilo<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">uuid<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">guid<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">native<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">assigned<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt 18.5pt; TEXT-INDENT: -18.75pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"><SPAN>·<SPAN> </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">foreign<O></O></SPAN></P>
<P class=MMTopic4><SPAN lang=EN-US>composite id</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;composite-id&gt;<BR><SPAN></SPAN>&lt;key-property name=""/&gt;<BR><SPAN></SPAN>&lt;key-property name=""/&gt;<BR>&lt;/composite-id&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.2 </SPAN></SPAN><SPAN lang=EN-US>Subclasses are saved in separated Table</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">并</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">不为父类</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Container</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">建立映射文件</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> Box</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">与</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Bottle</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">的映射文件也如没有关系一样普通的建立</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">但是对</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Container</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">取得操作</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><BR><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">List pcs = sess.createQuery("from com.be.david.Container").list();<BR>if(!cs.isEmpty()){<BR>...<BR>}<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">会将</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Box</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">与</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Container</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">数据都取出来</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">这是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Hibernate</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">默认隐式完成的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.3 </SPAN></SPAN><SPAN lang=EN-US>Parent Class and Subclasses are saved in separated Table</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="Container" table="CONTAINER"&gt;<BR>&lt;id...<BR>&lt;property...<BR>&lt;joined-subclass name="Box" table="CONTAINER_BOX"&gt;<BR>&lt;key column="ContainerId"/&gt;<BR>&lt;property...<BR>&lt;/joined-subclass&gt;<BR>&lt;joined-subclass name="Bottle" table="CONTAINER_BOTTLE"&gt;<BR>&lt;key...<BR>&lt;property...<BR>&lt;/joined-subclass&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.4 </SPAN></SPAN><SPAN lang=EN-US>One <ST1>PO</ST1> multi-table</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">public Class Person{<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">tring id;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">tring name;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">tring sex;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial">tring address;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial">tring city;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">牋牋燬</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial">tring zipcode;<BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">}<BR>we wanna save address related attributes(blue ones).Use <SPAN style="COLOR: red">join<BR></SPAN>&lt;class name="Person" table="PERSON"&gt;<BR><SPAN></SPAN>&lt;id...<BR><SPAN></SPAN>&lt;property ...<BR><SPAN></SPAN>&lt;join table="ADDRESS"&gt;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> &lt;key column="addressID"/&gt;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> &lt;property name="address"/&gt;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> ...<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">牋</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"> &lt;/join&gt;<BR>&lt;/class&gt;<O></O></SPAN></P>
<P class=MMTopic2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.5 </SPAN></SPAN><SPAN lang=EN-US>Class A Class B not inherited from Parent Class</SPAN></P>
<P class=MMTopic3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><SPAN lang=EN-US><SPAN>6.5.1 </SPAN></SPAN><SPAN lang=EN-US>subselect</SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">We can use <SPAN style="COLOR: rgb(51,51,153)">subselct </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">to make ChildA and ChildB standalone.So how can we get all data including ChindA and ChildB?<O></O></SPAN></P>
<P class=MsoNormal style="MARGIN: 2.8pt 0cm 5.65pt"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">&lt;class name="ChildA" table="parent"&gt;<BR><SPAN></SPAN>&lt;id...<BR><SPAN></SPAN>&lt;property...<BR>&lt;/class&gt;<BR>&lt;class name="ChildB" table="parent"&gt;<BR><SPAN></SPAN>&lt;id...<BR><SPAN></SPAN>&lt;property...<BR>&lt;/class&gt;<BR>&lt;class name="Parent" mutable="false"&gt;<BR><SPAN></SPAN>&lt;subselect&gt;<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">select * from ChildA<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">union<BR></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体"></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">select * from ChildB<BR><SPAN></SPAN>&lt;/subselect&gt;<BR><SPAN></SPAN>&lt;sychronize table="ChildA"/&gt;<BR><SPAN></SPAN>&lt;sychronize table="ChildB"/&gt;<BR><SPAN></SPAN>&lt;id...<BR><SPAN></SPAN>&lt;property...<BR>&lt;/class&gt;</SPAN></P><img src ="http://www.blogjava.net/blueoxygen/aggbug/31938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blueoxygen/" target="_blank">BlueO2</a> 2006-02-22 12:45 <a href="http://www.blogjava.net/blueoxygen/archive/2006/02/22/31938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>