Hibernate的复合主键,基于主键类的复合主键

java 代码
  1. public class User  implements java.io.Serializable {   
  2.   
  3.   
  4.     // Fields       
  5.   
  6.      private UserId id;   
  7.      private String email;   
  8.   
  9.   
  10.     // Constructors   
  11.   
  12.     /** default constructor */  
  13.     public User() {   
  14.     }   
  15.   
  16.        
  17.     /** full constructor */  
  18.     public User(String email) {   
  19.         this.email = email;   
  20.     }   
  21.   
  22.       
  23.     // Property accessors   
  24.   
  25.     public UserId getId() {   
  26.         return this.id;   
  27.     }   
  28.        
  29.     public void setId(UserId id) {   
  30.         this.id = id;   
  31.     }   
  32.   
  33.     public String getEmail() {   
  34.         return this.email;   
  35.     }   
  36.        
  37.     public void setEmail(String email) {   
  38.         this.email = email;   
  39.     }   
  40.       
  41. }  

 

java 代码
  1. public class UserId  implements java.io.Serializable {   
  2.   
  3.   
  4.     // Fields       
  5.   
  6.      private String addr;   
  7.      private String name;   
  8.   
  9.   
  10.     // Constructors   
  11.   
  12.     /** default constructor */  
  13.     public UserId() {   
  14.     }   
  15.   
  16.        
  17.     /** full constructor */  
  18.     public UserId(String addr, String name) {   
  19.         this.addr = addr;   
  20.         this.name = name;   
  21.     }   
  22.   
  23.       
  24.     // Property accessors   
  25.   
  26.     public String getAddr() {   
  27.         return this.addr;   
  28.     }   
  29.        
  30.     public void setAddr(String addr) {   
  31.         this.addr = addr;   
  32.     }   
  33.   
  34.     public String getName() {   
  35.         return this.name;   
  36.     }   
  37.        
  38.     public void setName(String name) {   
  39.         this.name = name;   
  40.     }   
  41.       
  42.   
  43.   
  44.   
  45.    public boolean equals(Object other) {   
  46.          if ( (this == other ) ) return true;   
  47.          if ( (other == null ) ) return false;   
  48.          if ( !(other instanceof UserId) ) return false;   
  49.          UserId castOther = ( UserId ) other;    
  50.             
  51.          return ( (this.getAddr()==castOther.getAddr()) || ( this.getAddr()!=null && castOther.getAddr()!=null && this.getAddr().equals(castOther.getAddr()) ) )   
  52.  && ( (this.getName()==castOther.getName()) || ( this.getName()!=null && castOther.getName()!=null && this.getName().equals(castOther.getName()) ) );   
  53.    }   
  54.       
  55.    public int hashCode() {   
  56.          int result = 17;   
  57.             
  58.          result = 37 * result + ( getAddr() == null ? 0 : this.getAddr().hashCode() );   
  59.          result = 37 * result + ( getName() == null ? 0 : this.getName().hashCode() );   
  60.          return result;   
  61.    }      
  62.   
  63. }  

 

xml 代码
  1. <hibernate-mapping>  
  2.     <class name="User" table="user" catalog="tie">  
  3.         <composite-id name="id" class="UserId">  
  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>  

 

这里把主键当成一个类,--->主键类.

有2点.

1,必须实现serializable

2.重写equals方法和hascode方法

xml中用compodite-id

测试的方法

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

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