`

多对一举例(单项的,从一个方向看)

阅读更多
java 代码
  1. public class User  implements java.io.Serializable {   
  2.   
  3.   
  4.     // Fields       
  5.   
  6.      private long id;   
  7.      private String name;  

多方拥有一方的属性Email将User作为自己的属性.

java 代码
  1. public class Email  implements java.io.Serializable {   
  2.   
  3.   
  4.     // Fields       
  5.   
  6.      private long id;   
  7.      private User user;   
  8.      private String email;  

在配置文件中,一方的没啥变化.

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="org.tie.User" table="user" catalog="tie">  
  3.         <id name="id" type="long">  
  4.             <column name="id" />  
  5.             <generator class="native" />  
  6.         </id>  
  7.         <property name="name" type="string">  
  8.             <column name="name" length="45" not-null="true" />  
  9.         </property>  
  10.     </class>  
  11. </hibernate-mapping>  

在多方需要加入many-to-one

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="org.tie.Email" table="email" catalog="tie">  
  3.         <id name="id" type="long">  
  4.             <column name="id" />  
  5.             <generator class="native" />  
  6.         </id>  
  7.         <many-to-one name="user" class="org.tie.User" fetch="select">  
  8.             <column name="uid" not-null="true" />  
  9.         </many-to-one>  
  10.         <property name="email" type="string">  
  11.             <column name="email" length="45" not-null="true" />  
  12.         </property>  
  13.     </class>  
  14. </hibernate-mapping>  

 

java 代码
  1. public void testCreate(){   
  2.         Email email1 = new Email();   
  3.         email1.setEmail("linweihan@163.com");   
  4.            
  5.         Email email2 = new Email();   
  6.         email2.setEmail("linweiyang@163.com");   
  7.            
  8.         User user = new User();   
  9.         user.setName("lin");   
  10.            
  11.         email1.setUser(user);   
  12.         email2.setUser(user);   
  13.            
  14.         Session session = factory.openSession();   
  15.         Transaction tr = session.beginTransaction();   
  16.         session.save(user);   
  17.         session.save(email1);   
  18.         session.save(email2);   
  19.         tr.commit();   
  20.         session.close();   
  21.     }   
  22.        
  23.        
  24.     public void testRetrieve(){   
  25.         Session session = factory.openSession();   
  26.         Email email = (Email)session.load(Email.classnew Long(1));   
  27.         System.out.println(email.getUser().getName());   
  28.         session.close();   
  29.     }  
分享到:
评论
1 楼 terryyang 2007-12-22  
当把User删掉之后,再加载Email时,就会报异常,因为引用的user已经不存在了,当然可以设置Email中User的not-found="ignore",但这样当加载Email时都要多发生一条sql去查询看是否对应的user还存在,如果一个实体中有多个这样的字段,性能很差,不知道你是如何解决的

相关推荐

Global site tag (gtag.js) - Google Analytics