📄 incrementgenerator.java
字号:
package org.hibernate.id;import java.io.Serializable;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Properties;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.hibernate.HibernateException;import org.hibernate.MappingException;import org.hibernate.exception.JDBCExceptionHelper;import org.hibernate.dialect.Dialect;import org.hibernate.engine.SessionImplementor;import org.hibernate.mapping.Table;import org.hibernate.type.Type;/** * <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: table, column. * * @author Gavin King */public class IncrementGenerator implements IdentifierGenerator, Configurable { private static final Log log = LogFactory.getLog(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 d) throws MappingException { String table = params.getProperty("table"); if (table==null) table = params.getProperty(PersistentIdentifierGenerator.TABLE); 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(); sql = "select max(" + column + ") from " + Table.qualify(catalog, schema, table, d.getSchemaSeparator() ); } private void getNext( SessionImplementor session ) { Connection conn = session.connection(); log.debug("fetching initial value: " + sql); try { PreparedStatement st = conn.prepareStatement(sql); ResultSet rs = null; try { rs = st.executeQuery(); 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 { if (rs!=null) rs.close(); st.close(); } } catch (SQLException sqle) { throw JDBCExceptionHelper.convert( session.getFactory().getSQLExceptionConverter(), sqle, "could not fetch initial value", sql ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -