需求:需要自增长注解如MyId0001、MyId0002、MyId0003

实现:实现这个接口org.hibernate.id.IdentifierGenerator

一、MyIdGenerator.java(测试用,实际项目中获取链接等可以改变)
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;
public class MyIdGenerator implements IdentifierGenerator{
@Override
public Serializable generate(SessionImplementor session, Object object)
throws HibernateException {
String prefix = "MyId";
Connection connection = session.connection();
try {
PreparedStatement ps = connection
.prepareStatement("SELECT nextval ('seq_id') as nextval");
ResultSet rs = ps.executeQuery();
if (rs.next()) {
int id = rs.getInt("nextval");
String code = prefix + StringUtils.leftPad("" + id,3, '0');
log.debug("Generated Stock Code: " + code);
return code;
}
} catch (SQLException e) {
log.error(null, e);
throw new HibernateException(
"Unable to generate Stock Code Sequence");
}
return null;
}
} 二、配置hibernate主键生成策略 基于配置文件的hibernate(TestHibernateIdentifier.xml) <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.fire.front.entity">
<class name="TestHibernateIdentifier" table="test_hibernate_identifier" dynamic-update="true">
<meta attribute="sync-DAO">false</meta>
<cache usage="read-write"/>
<id name="id" type="string" column="id">
<generator class="com.gwold.common.util.MyIdGenerator"/>
</id>
<property name="name" type="string" column="name" length="40"/>
</class>
</hibernate-mapping> 基于注解的方式
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
public class TestHibernateIdentifier implements Serializable{
@Id
@GenericGenerator(name="seq_id", strategy="com.gwold.common.util.MyIdGenerator")
@GeneratedValue(generator="seq_id")
@Column(name = "id", unique = true, nullable = false, length = 20)
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

  

最新文章

  1. VS2012 还原默认设置
  2. 20个高级Java面试题
  3. 3种创建、调用JavaScript对象的方法
  4. C51单片机内存优化
  5. 第五章:输入输出(IO)管理
  6. socket抓取网页
  7. Cocos2d-x V2.x -- 开发进阶和高级实例教程(一) 转
  8. php+ajax实现登录按钮加载loading效果
  9. vim中文乱码问题
  10. POJ1064 Cable master(二分 浮点误差)
  11. 前向星&amp;链式前向星
  12. oracle索引分类
  13. 二分图判定 POJ-2492
  14. 利用sqlmap对网站进行sql注入检测
  15. 第一讲(3)osgearth编译
  16. C#与java中的AES加解密互解算法
  17. POJ 3667 Hotel(线段树+区间合并)
  18. Q:判断链表中是否存在环的相关问题
  19. uchome 常用函数示例
  20. 在一般处理程序里面读写session

热门文章

  1. java文档 第十一章 其他考量-b
  2. 编程算法 - 高速排序算法 代码(C)
  3. 分享分享JavaScript100例-仅供参考
  4. Atiti。流量提升软件设计大纲规划 v1 q45
  5. Zynq GPIO 中断
  6. C#新特性, dynamic, ExpandObject
  7. python学习之多行字符串
  8. mysql之slave_skip_errors选项
  9. mysql循环查询
  10. ant.xml