⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 incrementgenerator.java

📁 一个Java持久层类库
💻 JAVA
字号:
package org.hibernate.id;import java.io.Serializable;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.hibernate.HibernateException;import org.hibernate.MappingException;import org.hibernate.dialect.Dialect;import org.hibernate.engine.SessionImplementor;import org.hibernate.exception.JDBCExceptionHelper;import org.hibernate.mapping.Table;import org.hibernate.type.Type;import org.hibernate.util.StringHelper;/** * <b>increment</b><br> * <br> * An <tt>IdentifierGenerator</tt> that returns a <tt>long</tt>, constructed by * counting from the maximum primary key value at startup. Not safe for use in a * cluster!<br> * <br> * Mapping parameters supported, but not usually needed: tables, column. * (The tables parameter specified a comma-separated list of table names.) * * @author Gavin King */public class IncrementGenerator implements IdentifierGenerator, Configurable {	private static final Logger log = LoggerFactory.getLogger(IncrementGenerator.class);	private long next;	private String sql;	private Class returnClass;	public synchronized Serializable generate(SessionImplementor session, Object object) 	throws HibernateException {		if (sql!=null) {			getNext( session );		}		return IdentifierGeneratorFactory.createNumber(next++, returnClass);	}	public void configure(Type type, Properties params, Dialect dialect)	throws MappingException {		String tableList = params.getProperty("tables");		if (tableList==null) tableList = params.getProperty(PersistentIdentifierGenerator.TABLES);		String[] tables = StringHelper.split(", ", tableList);		String column = params.getProperty("column");		if (column==null) column = params.getProperty(PersistentIdentifierGenerator.PK);		String schema = params.getProperty(PersistentIdentifierGenerator.SCHEMA);		String catalog = params.getProperty(PersistentIdentifierGenerator.CATALOG);		returnClass = type.getReturnedClass();				StringBuffer buf = new StringBuffer();		for ( int i=0; i<tables.length; i++ ) {			if (tables.length>1) {				buf.append("select ").append(column).append(" from ");			}			buf.append( Table.qualify( catalog, schema, tables[i] ) );			if ( i<tables.length-1) buf.append(" union ");		}		if (tables.length>1) {			buf.insert(0, "( ").append(" ) ids_");			column = "ids_." + column;		}				sql = "select max(" + column + ") from " + buf.toString();	}	private void getNext( SessionImplementor session ) {		log.debug("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);			}					}		catch (SQLException sqle) {			throw JDBCExceptionHelper.convert(					session.getFactory().getSQLExceptionConverter(),					sqle,					"could not fetch initial value for increment generator",					sql				);		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -