/**
*hibernate ID策略生成器 自定义 - 规则: 业务编号 + 日期 + 六位自增长序列
*/
public class MyKeyGenerator implements IdentifierGenerator, Configurable {
private static final Log log = LogFactory.getLog(MyKeyGenerator.class);
private long next;
private String sql;
private String table;
private String column;
private String schema;
public synchronized Serializable generate(SessionImplementor session,
Object object) throws HibernateException {
SimpleDateFormat f = new SimpleDateFormat("yyMMdd");
String preDate = f.format(new Date());
LogAction logaction = new LogAction();
// String bh = logaction.getBh();
String bh = "123456789";
return bh + preDate + getNext(session, bh,table);
}
public void configure(org.hibernate.type.Type type, Properties params,
Dialect d) throws MappingException {
table = params.getProperty("table");
if (table == null)
table = params.getProperty(PersistentIdentifierGenerator.TABLE);
column = params.getProperty("column");
if (column == null)
column = params.getProperty(PersistentIdentifierGenerator.PK);
schema = params.getProperty(PersistentIdentifierGenerator.SCHEMA);
}
/**
* 得到当前表ID的最后六位的最大数
*
* @param session
* @param jsbh
* @return
*/
private String getNext(SessionImplementor session, String bh,String table) {
sql = "select max(substr("+column+",16)) from "+(schema == null ? table : schema + '.' + table)+" where substr("+column+",10,6) = to_char(sysdate,'yyMMdd') and substr("+column+",0,9) = '" + bh + "' and length("+column+")=21 ";
log.info("fetching initial value: " + sql);
try {
PreparedStatement st = session
.getBatcher()
.prepareSelectStatement(
sql);
try {
ResultSet rs = st.executeQuery();
try {
if (rs.next()) {
next = rs.getLong(1) + 1;
if (rs.wasNull())
next = 1;
} else {
next = 1;
}
sql = null;
log.debug("first free id: " + next);
} finally {
rs.close();
}
} finally {
session.getBatcher().closeStatement(st);
}
return toString(6, next);
} catch (SQLException sqle) {
throw JDBCExceptionHelper.convert(session.getFactory()
.getSQLExceptionConverter(), sqle,
"could not fetch initial value for increment generator",
sql);
}
}
/**
* 格式化数字不足补齐
*
* @param num
* @param value
* @return
*/
public static String toString(int num, long value) {
String result = (new Long(value)).toString();
while (num > result.length()) {
result = "0" + result;
}
return result;
}
JAVA中注解使用方法:
@Id @GeneratedValue(generator="custom-id")
@GenericGenerator(name="custom-id", strategy = "javacommon.base.AwdKeyGenerator")
@Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = true, length = 21)
public java.lang.String getId() {
return this.id;
}
0 0 0
(请您对文章做出评价)
分享到:
相关推荐
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
1)JSP+javabean+DAO(Ajax:anywhere) 2)Struts+spring+hibernate3(AJax:DOJO) 3)JSF+richfaces+seam+EJB 总共3个完整的实例,并配有需求分析~~~~~~~~,绝对经典!
NULL 博文链接:https://hezhiyu.iteye.com/blog/1284415
Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate(一步一步的教你敲代码)(博客园,博客名称:Java-Spring+Struts+Hibernate-SSH框架整合01-Spring+Hibernate)
Manning+-+Hibernate+In+Action+(2007) Manning+-+Hibernate+In+Action+(2007) Manning+-+Hibernate+In+Action+(2007)
+----doc +-----jeecms基础概念.txt +-----图文安装JDK+TOMCAT+MYSQL配置指南.doc +----jeecms +-----源码 +----JEECMS v2.3.2 Final版发布公告.txt +----readme.txt +----框架简介.txt JEECMS是JavaEE版网站...
第4章【源码】java web整合开发实战--基于struts 2+hibernate+spring 贾蓓 镇明敏 杜磊
毕业设计&课设--基于Structs+Hibernate+Spring+mahout+bootstrap+junit
关于Hibernate的各种主键生成策略与配置详解
青鸟(国际)器材销售系统网站--eSale(struts+Hibernate+Spring+Ajax版)【外加自己写的一个简单的,包括数据库】
java'源码Struts2.3+Spring3+Hibernate4 框架和工具 Java&IDE:JDK7 Eclipse MyEclipse 后端:Struts2.3.16 Spring3.2.8 Hibernate4.2.11(注解配置) 前端:JQuery-EasyUI1.3.1 Javascript JQuery Ajax 数据库:...
kateshdmade-small-online-shop:Spring+ HIBERNATE + AZURE SQL BBDD +上传项目图像的AZURE存储
课程设计、毕业设计以及练手的优质java项目---网络购物系统(struts+hibernate) 课程设计、毕业设计以及练手的优质java项目---网络购物系统(struts+hibernate) 课程设计、毕业设计以及练手的优质java项目---网络...
《JavaEE实用开发指南:基于Weblogic+EJB3+Struts2+Hibernate+Spring》-- part2/3
JSF第一步--JSF+Spring+ Hibernate+AJAX编程实践 试读
QAQ课程系统 (spring + springMVC + hibernate)+(vue + vuex + vue-resource)
Java Web开发技术大全--JSP+Servlet+Struts 2+Hibernate+Spring+AJAX.(李宁)
第3章【源码】java web整合开发实战--基于struts 2+hibernate+spring 贾蓓 镇明敏 杜磊