Hibernate的复合主键,基于属性的复合主键

java 代码
  1. import org.apache.commons.lang.builder.EqualsBuilder;   
  2. import org.apache.commons.lang.builder.HashCodeBuilder;   
  3.   
  4. // default package   
  5.   
  6.     
  7.   
  8. /**  
  9.  * User generated by MyEclipse - Hibernate Tools  
  10.  */  
  11.   
  12. public class User  implements java.io.Serializable {   
  13.   
  14.   
  15.     // Fields       
  16.   
  17.   private String addr;   
  18.      private String name;   
  19.      private String email;   
  20.   
  21.   
  22.     // Constructors   
  23.   
  24.     /** default constructor */  
  25.     public User() {   
  26.     }   
  27.   
  28.        
  29.     /** full constructor */  
  30.     public User(String email) {   
  31.         this.email = email;   
  32.     }   
  33.   
  34.       
  35.     // Property accessors   
  36.   
  37.      
  38.   
  39.     public String getEmail() {   
  40.         return this.email;   
  41.     }   
  42.        
  43.     public void setEmail(String email) {   
  44.         this.email = email;   
  45.     }   
  46.   
  47.   
  48.  public String getAddr() {   
  49.   return addr;   
  50.  }   
  51.   
  52.   
  53.  public void setAddr(String addr) {   
  54.   this.addr = addr;   
  55.  }   
  56.   
  57.   
  58.  public String getName() {   
  59.   return name;   
  60.  }   
  61.   
  62.   
  63.  public void setName(String name) {   
  64.   this.name = name;   
  65.  }   
  66.     
  67.  public boolean equals(Object other) {   
  68.         if ( (this == other ) ) return true;   
  69.    if ( (other == null ) ) return false;   
  70.    if ( !(other instanceof UserId) ) return false;   
  71.    User castOther = ( User ) other;    
  72.            
  73. //   return ( (this.getAddr()==castOther.getAddr()) || ( this.getAddr()!=null && castOther.getAddr()!=null && this.getAddr().equals(castOther.getAddr()) ) )   
  74. //             && ( (this.getName()==castOther.getName()) || ( this.getName()!=null && castOther.getName()!=null && this.getName().equals(castOther.getName()) ) )   
  75. //             && ( (this.getEmail()==castOther.getEmail()) || ( this.getEmail()!=null && castOther.getEmail()!=null && this.getEmail().equals(castOther.getEmail()) ) );   
  76.    return  new EqualsBuilder().append(this.name, castOther.getName())   
  77.                               .append(this.addr, castOther.getAddr())   
  78.                               .append(this.email, castOther.getEmail()).isEquals();   
  79.   }   
  80.      
  81.   public int hashCode() {   
  82.         int result = 17;   
  83.            
  84. //        result = 37 * result + ( getAddr() == null ? 0 : this.getAddr().hashCode() );   
  85. //        result = 37 * result + ( getName() == null ? 0 : this.getName().hashCode() );   
  86. //        result = 37 * result + ( getEmail() == null ? 0 : this.getEmail().hashCode() );   
  87.         return new HashCodeBuilder().append(this.getName()).append(this.getAddr()).append(this.getEmail()).toHashCode();   
  88.   }      
  89.       
  90. }   

 

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="User" table="user" catalog="tie">  
  3.         <composite-id >  
  4.             <key-property name="addr" type="string">  
  5.                 <column name="addr" length="45" />  
  6.             key-property>  
  7.             <key-property name="name" type="string">  
  8.                 <column name="name" length="45" />  
  9.             key-property>  
  10.         composite-id>  
  11.         <property name="email" type="string">  
  12.             <column name="email" length="45" />  
  13.         property>  
  14.     class>  
  15. hibernate-mapping>  

 

  测试下

java 代码
  1. public void testCase(){   
  2.            
  3.         User user = new User();   
  4.         user.setName("mamamm");   
  5.         user.setAddr("china beijiing");   
  6.         user.setEmail("[email protected]");   
  7.            
  8.         Session session = factory.openSession();   
  9.         Transaction tr = session.beginTransaction();   
  10.         session.save(user);   
  11.         tr.commit();   
  12.         session.close();   
  13.     }   
  14.        
  15.     public void testRetrieve(){   
  16.            
  17.         User user = new User();   
  18.         user.setName("mamamm");   
  19.         user.setAddr("china beijiing");   
  20.            
  21.         Session session = factory.openSession();   
  22.         user = (User)session.load(User.class, user);   
  23.         System.out.println(user.getEmail());   
  24.         session.close();   
  25.     }  

 

这里重写equals和hascode方法的时候 ,采用了一个第3方的common-lang包.

你可能感兴趣的:(apache,Hibernate,xml,MyEclipse)