📄 resequencegenerator.java
字号:
package com.common.util.cis;
import java.io.Serializable;
import java.util.Properties;
import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.Configurable;
import org.hibernate.id.PersistentIdentifierGenerator;
import org.hibernate.type.Type;
import org.hibernate.util.PropertiesHelper;
/**
* Sequence 主键生成类 取得id转化为32进制形式,然后前补“0”,生成idstringlen位字串
* @date 2006-2-24
* @author 刘学军
*
* 表主键生成说明
* 本例中生成的是oracle中的sequence值的32进制形式,最后返回前面补“0”的8位字串
* 只需在xxx.hbm.xml中配置id项即可,在DAO中不需要对主键项进行付值
<id name="yjxxrecid" type="java.lang.String"> 说明:po中的主键属性
<column name="YJXXRECID" length="8" /> 说明:po对应数据表字段
<generator class="com.common.util.cis.ReSequenceGenerator">说明:生成主键类,类似于 increment assigned等,使用前先将此类与cvs同步
<param name="sequence">seq_seqid</param> 说明:sequence的名称,即oracle中的sequence名称
<param name="idstringlen">8</param> 说明:返回主键字串的长度
</generator>
</id>
*
*/
public class ReSequenceGenerator extends org.hibernate.id.SequenceGenerator implements PersistentIdentifierGenerator, Configurable {
/**
* The parameters parameter, appended to the create sequence DDL.
* For example (Oracle): <tt>INCREMENT BY 1 START WITH 1 MAXVALUE 100 NOCACHE</tt>.
*/
public static final String IDSTRINGLEN = "idstringlen";
private int idStrLen;
public void configure(Type type, Properties params, Dialect dialect) throws
MappingException {
super.configure(type,params,dialect);
idStrLen = Integer.parseInt(PropertiesHelper.getString(IDSTRINGLEN, params,"8"));
}
/* (非 Javadoc)
* @see org.hibernate.id.IdentifierGenerator#generate
(org.hibernate.engine.SessionImplementor, java.lang.Object)
*/
public Serializable generate(SessionImplementor session, Object obj)
throws HibernateException {
try {
Serializable result=super.generate(session,obj);
System.out.println("Sequence identifier:"+result);
//return result;
/*
* 取得id转化为32进制形式,然后前补“0”,生成8位字串
*/
return Sqid.getSqidTewString(Long.parseLong(result.toString()),idStrLen);
}catch(HibernateException e){
throw e;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -