`

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("linweihan@163.com");   
  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.     }  
分享到:
评论
1 楼 满月无双 2008-12-16  
请教一下:为什么要覆写equals和hashCode方法,这两个函数的作用体现在哪里?
还有serializable接口的作用是啥?

相关推荐

    Hibernate复合主键

    "Hibernate复合主键" Hibernate复合主键是指在 Hibernate 框架中使用复合主键来唯一标识一个实体。复合主键是指由多个字段组成的主键,用于唯一标识一个实体。在本例中,我们将通过一个简单的复合主键的做关联类的...

    hibernate复合主键配置和使用

    《Hibernate复合主键配置与使用详解》 在Java开发中,Hibernate作为一款强大的ORM框架,大大简化了数据库操作。然而,当我们面临复杂的数据表结构,尤其是涉及到复合主键时,如何在Hibernate中进行配置和使用就显得...

    hibernate复合主键设置

    在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 ...

    hibernate复合主键映射

    复合主键映射 &lt;br&gt;通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射

    hibernate 无主键表映射

    `@Embeddable`注解用于定义一个包含复合主键字段的类,而`@EmbeddedId`注解则用在实体类上,指定这个复合主键类。 以下是一个简单的示例: 1. **复合主键类(Composite Key Class)** ```java import javax....

    hibernate复合主键的实例

    在Hibernate中,通过定义`@Embeddable`的复合主键类和`@EmbeddedId`的实体类,我们可以方便地管理和操作这些复合主键的实体。在保存和查询时,需注意正确设置复合主键的值,以确保数据的正确性。希望这个实例能帮助...

    Hibernate复合主键视频2

    请更名为 Hibernate复合主键.part2.rar

    Hibernate复合主键3

    更名为 Hibernate复合主键.part3.rar

    Hibernate复合主键.

    本篇文章将深入探讨Hibernate如何支持和管理复合主键。 一、理解复合主键 在数据库设计中,复合主键是一种特殊情况,当单个字段不能唯一标识表中的每一行时,可以使用两个或多个字段的组合来创建唯一的标识。例如...

    Hibernate复合主键part1

    本章讲解Hibernate中对数据库复合主键的支持

    演示怎样在Hibernate中使用复合主键

    环境:Windows XP professional、JDK 1.6、Hibernate 3.1、SQL Server 2000、MyEclipse 5.5...注意:复合主键类我使用内部类来实现--本人觉得这种使用内部类来封装比较专业。所有代码与配置档都有非常详细的注释说明。

    Java的Hibernate框架中复合主键映射的创建和使用教程

    在Java的Hibernate框架中,复合主键映射是一种处理多列组合成主键的情况,它使得在数据库表中由两个或更多个字段组成的主键能够被正确地映射到实体类。在使用复合主键时,我们需要遵循一定的步骤和规则。 首先,...

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    通过这种方式,Hibernate将知道如何处理`UserRole`类,将其映射到具有复合主键的数据库表。 3. 嵌入式主键(Embedded Id): 如果希望将主键字段作为实体类的一部分,而不是单独的类,可以使用`@EmbeddedId`和`@...

    hibernate复合主键及关联的实现

    博文链接:https://balaschen.iteye.com/blog/155127

Global site tag (gtag.js) - Google Analytics