Hibernate自定义主键生成

来源:互联网 发布:c语言伪代码编写 编辑:程序博客网 时间:2024/05/21 05:22

摘自:http://blog.csdn.net/u014042146/article/details/52595624


Hibernate 和 JPA 注解方式自定义ID生成器

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * Test.java 
  3.  * 实体类定义和配置 
  4.  */  
  5. package com.saving.ecm.resource.entity;  
  6.   
  7.   
  8. import javax.persistence.Column;  
  9. import javax.persistence.Entity;  
  10. import javax.persistence.GeneratedValue;  
  11. import javax.persistence.Id;  
  12. import javax.persistence.Table;  
  13. import javax.xml.bind.annotation.XmlRootElement;  
  14.   
  15.   
  16. import org.hibernate.annotations.GenericGenerator;  
  17. import org.hibernate.annotations.Parameter;  
  18.   
  19.   
  20.   
  21. @XmlRootElement  
  22. @Entity  
  23. @Table(name = "test")  
  24. public class Test {  
  25.     @Id  
  26.     @GeneratedValue(generator = "idGenerator")  
  27.     @GenericGenerator(name = "idGenerator", strategy = "com.saving.ecm.resource.entity.IdGenerator",  
  28.     parameters = { @Parameter(name = "dataCenterID", value = "20") ,@Parameter(name = "idLength", value = "10")})  
  29.     private String code;  
  30.   
  31.   
  32.     @Column(name = "name", nullable = false, columnDefinition = "varchar(48) default '' comment '名字'")  
  33.     private String name;  
  34.   
  35.   
  36.     public String getCode() {  
  37.         return code;  
  38.     }  
  39.   
  40.   
  41.     public void setCode(String code) {  
  42.         this.code = code;  
  43.     }  
  44.   
  45.   
  46.     public String getName() {  
  47.         return name;  
  48.     }  
  49.   
  50.   
  51.     public void setName(String name) {  
  52.         this.name = name;  
  53.     }  
  54.   
  55.   
  56.   
  57.   
  58. }  



模拟自定义ID生成器
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.saving.ecm.resource.entity;  
  2.   
  3.   
  4. import java.io.Serializable;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.Date;  
  7. import java.util.Properties;  
  8.   
  9.   
  10. import org.hibernate.dialect.Dialect;  
  11. import org.hibernate.engine.spi.SessionImplementor;  
  12. import org.hibernate.id.AbstractUUIDGenerator;  
  13. import org.hibernate.id.Configurable;  
  14. import org.hibernate.type.Type;  
  15.   
  16.   
  17.   
  18. public class IdGenerator implements Configurable,IdentifierGenerator {  
  19.   
  20.   
  21.     public String dataCenterID;  
  22.     public String idLength;  
  23.   
  24.   
  25.     public void configure(Type type, Properties params, Dialect d) {  
  26.         this.dataCenterID = params.getProperty("dataCenterID");  
  27.         this.idLength = params.getProperty("idLength");  
  28.     }  
  29.   
  30.   
  31.     public Serializable generate(SessionImplementor session, Object obj) {  
  32.         return dataCenterID + idLength;  
  33.     }  
  34.   
  35.   
  36. }  




摘自:http://www.cnblogs.com/xmqa/p/6424386.html


Hibernate自定义主键生成

当使用Hibernate定义pojo的时候,有时候需要生成一定规则的数据表主键,这时候我们可以采用自定义主键生成方式去生成主键。

例如:

1、在pojo属性中定义数据表主键

1     @Id2     @GeneratedValue(generator = "xmqId")3     @GenericGenerator(name = "xmqId", strategy = "com.xmq.core.XMQGenerator")4     @Column(name = "C_ID")5     private String pk;

 

2、创建主键生成器

复制代码
 1 package com.xmq.core; 2  3 import java.io.Serializable; 4  5 import org.hibernate.engine.spi.SessionImplementor; 6 import org.hibernate.id.UUIDHexGenerator; 7  8 public class XMQGenerator extends UUIDHexGenerator { 9 10     public XMQGenerator () {11         super();12     }13 14     @Override15     public Serializable generate(SessionImplementor session, Object obj) {16         return "PK_" + super.generate(session, obj);17     }18 19     20 }
复制代码

注意:在pojo的父类中有时候带有@MappedSuperclass注解,这表示这个父类不是一个完整的实体类,也不会映射到数据库表,但是他的属性都将映射到其子类的数据表字段中。



0 0
原创粉丝点击