📄 idgenerator.java
字号:
package com.hongsoft.res.util;
import java.util.HashMap;
import org.hibernate.Session;
import com.hongsoft.res.database.ObjectID;
public class IDGenerator {
private static HashMap keygens = new HashMap(20);
private static final int POOL_SIZE = 1;
// private static final int LEST_SIZE=5;
private static int errorTime = 5;
private static KeyInfo keyinfo;
private IDGenerator(Session session, String keyName) {
keyinfo = new KeyInfo(session, POOL_SIZE, keyName);
}
/**
* 取ID,提供下一个合适的ID值,tableName为表名
*
* @return
*/
public synchronized static int newID(Session session, String tableName) {
if (keygens.containsKey(tableName)) {
KeyInfo value = ((KeyInfo) keygens.get(tableName));
return value.getNextKey(session);
} else {
new IDGenerator(session, tableName);
return keyinfo.getNextKey(session);
}
}
private class KeyInfo {
private int keyMax;
private int keyMin;
private int nextKey;
private int poolSize;
private String keyName;
public KeyInfo(Session session, int poolSize, String keyName) {
this.poolSize = poolSize;
this.keyName = keyName;
retriveFromDB(session, poolSize, keyName);
}
public int getNextKey(Session session) {
if (nextKey > keyMax) {
retriveFromDB(session, poolSize, keyName);
}
return nextKey++;
}
/**
* 从数据库提取ID值
*/
/*
* private void retriveFromDB(int poolSize,String keyName) { try{ ObjectID
* objectID=(ObjectID)ac.getHibernateSession().load(ObjectID.class,keyName);
* objectID.setValue(objectID.getValue()+poolSize); ac.getHibernateSession().save(objectID);
* keyMax=Integer.parseInt(Long.toString(objectID.getValue())); keyMin=keyMax-poolSize+1; nextKey=keyMin;
* //将本keyInfo放入hashmap中 keygens.put(keyName,this); }catch(Exception qe){ if(errorTime-->0){
* retriveFromDB(poolSize,keyName); } } }
*/
/**
* 从数据库提取ID值
*/
private void retriveFromDB(Session session, int poolSize, String keyName) {
try {
ObjectID objectID = (ObjectID) session.load(ObjectID.class, keyName);
objectID.setValue(objectID.getValue() + poolSize);
session.save(objectID);
keyMax = Integer.parseInt(Long.toString(objectID.getValue()));
keyMin = keyMax - poolSize + 1;
nextKey = keyMin;
// 将本keyInfo放入hashmap中
keygens.put(keyName, this);
} catch (Exception qe) {
if (errorTime-- > 0) {
retriveFromDB(session, poolSize, keyName);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -