Welcome 微信登录

首页 / 数据库 / MySQL / Hibernate主键ID自动生成两种方法示例

版本:hibernate-3.2.7 方法之一: 用uuid生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找到是抛出异常。 Xxxclass.hbm.xml代码
  1. <id name="id" type="java.lang.String" column="ID">   
  2.         <generator class="uuid.hex" />   
  3.     </id>  
Xxxclass.java代码
  1. public class XXXClass{   
  2.         /** id */   
  3.         private String id;   
  4.      
  5.         public void setId(String id) {   
  6.         this.id = id;   
  7.     }   
  8.        
  9.     public String getId() {   
  10.         return id;   
  11.     }   
  12. }  
方法之二: 用org.hibernate.id.UUIDHexGenerator生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找则执行insert。 Xxxclass.hbm.xml代码
  1. <id name="id" type="java.lang.String" column="ID">   
  2.         <generator class="AssignCopiedId" />   
  3.     </id>  
Xxxclass.java代码
  1. public class XXXClass implements AssignedIdModel{   
  2.         /** id */   
  3.         private String id;   
  4.      
  5.         public void setId(String id) {   
  6.         this.id = id;   
  7.     }   
  8.        
  9.     public String getId() {   
  10.         return id;   
  11.     }   
  12.   
  13.         @Override   
  14.     public String getAssignedId() {   
  15.         return assignedId;   
  16.     }   
  17.   
  18.     public void setAssignedId(String assignedId) {   
  19.         this.assignedId = assignedId;   
  20.     }   
  21. }  
Assignedidmodel.java代码
  1. public interface AssignedIdModel {   
  2.        
  3.     public String getAssignedId();   
  4.   
  5. }  
Assigncopiedid.java代码
  1. import org.hibernate.engine.SessionImplementor;   
  2. import org.hibernate.id.UUIDHexGenerator;   
  3.   
  4. public class AssignCopiedId extends UUIDHexGenerator {   
  5.     public Serializable generate(SessionImplementor session, Object obj) {   
  6.         if (obj instanceof AssignedIdModel   
  7.                 && (((AssignedIdModel) obj).getAssignedId() != null    
  8.                     && ((AssignedIdModel) obj).getAssignedId().trim().length() > 0)) {   
  9.             return ((AssignedIdModel) obj).getAssignedId();   
  10.         } else {   
  11.             return super.generate(session, obj);   
  12.         }   
  13.     }   
  14. }  
总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。 Hibernate主键生成方式及配置MySQL主从复制、基于SSL的主从复制、主主复制、半同步复制相关资讯      Hibernate教程 
  • Hibernate的批量处理-批量更新  (06/30/2012 06:48:35)
  • Hibernate二级缓存相关属性  (06/30/2012 06:46:44)
  • Hibernate主键生成方式及配置  (06/01/2012 11:44:36)
  • Hibernate的批量处理-批量插入  (06/30/2012 06:47:18)
  • Hibernate事务属性  (06/30/2012 06:44:56)
  • Hibernate 主键自动生成的方法  (06/01/2012 11:39:56)
本文评论 查看全部评论 (0)
表情: 姓名: 字数