📄 dailyseqidgenerator.java
字号:
package com.ejsun.entapps.domain.util;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import com.ejsun.entapps.domain.SequenceIdGenerator;
import com.ejsun.entapps.util.FormatConstants;
/**
* DailySeqIdGenerator that returns a Sequence Id, constructed by counting from the today maximum value.
* The return format is 'yyyy-MM-dd-xxxxx'.
* @author Quake Wang
* @since 2004-5-19
* @version $Revision: 1.2 $
*
**/
public class DailySeqIdGenerator implements InitializingBean, SequenceIdGenerator {
private static final Log log = LogFactory.getLog(DailySeqIdGenerator.class);
private static final long FORMATER = 100000;
private SessionFactory sessionFactory;
private Map sequences;
private Map maxSeqIds;
public void afterPropertiesSet() throws Exception {
maxSeqIds = new Hashtable();
if (sequences == null)
return;
Session session = sessionFactory.openSession();
String today = formatToday();
try {
for (Iterator iter = sequences.keySet().iterator(); iter.hasNext();) {
String className = (String) iter.next();
String seqName = (String) sequences.get(className);
Iterator results =
session.iterate(
"select max(clazz."
+ seqName
+ ") from "
+ className
+ " clazz where clazz."
+ seqName
+ " like '"
+ today
+ "%'");
if (results.hasNext()) {
String maxValue = (String) results.next();
if(maxValue != null) {
log.info("Got max value " + className + "." + seqName + " : " + maxValue);
maxSeqIds.put(className + today, new Long(maxValue.substring(11)));
}
}
}
} catch (HibernateException he) {
throw he;
} finally {
if (session != null)
session.close();
}
}
public String getSequenceId(Class clazz) {
String today = formatToday();
String key = clazz.getName() + today;
Long result = null;
Long maxSeqId = (Long) maxSeqIds.get(key);
synchronized (DailySeqIdGenerator.class) {
if (maxSeqId != null) {
result = new Long(maxSeqId.longValue() + 1);
} else {
result = new Long(1);
}
}
maxSeqIds.put(key, result);
return today + Long.toString(result.longValue() + FORMATER).substring(1);
}
private String formatToday() {
return FormatConstants.DATE_FORMAT.format(new Date()) + "-";
}
public void setSequences(Map map) {
sequences = map;
}
public void setSessionFactory(SessionFactory factory) {
sessionFactory = factory;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -