|
Hibernate example source code file (MultipleHiLoPerTableGenerator.java)
The Hibernate MultipleHiLoPerTableGenerator.java source code/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2010, Red Hat Inc. or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Red Hat Inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ 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.sql.Types; import java.util.Properties; import org.hibernate.HibernateException; import org.hibernate.internal.CoreMessageLogger; import org.hibernate.LockMode; import org.hibernate.MappingException; import org.hibernate.cfg.ObjectNameNormalizer; import org.hibernate.dialect.Dialect; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.engine.jdbc.internal.FormatStyle; import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.jdbc.spi.SqlStatementLogger; import org.hibernate.id.enhanced.AccessCallback; import org.hibernate.id.enhanced.OptimizerFactory; import org.hibernate.internal.util.config.ConfigurationHelper; import org.hibernate.jdbc.AbstractReturningWork; import org.hibernate.jdbc.WorkExecutorVisitable; import org.hibernate.mapping.Table; import org.hibernate.type.Type; import org.jboss.logging.Logger; /** * * A hilo <tt>IdentifierGenerator that returns a Long, constructed using * a hi/lo algorithm. The hi value MUST be fetched in a seperate transaction * to the <tt>Session transaction so the generator must be able to obtain * a new connection and commit it. Hence this implementation may not * be used when the user is supplying connections. In this * case a <tt>SequenceHiLoGenerator would be a better choice (where * supported).<br> * <br> * * A hilo <tt>IdentifierGenerator that uses a database * table to store the last generated values. A table can contains * several hi values. They are distinct from each other through a key * <p/> * <p>This implementation is not compliant with a user connection * <p/> * * <p>Allowed parameters (all of them are optional): * <ul> * <li>table: table name (default hibernate_sequences) * <li>primary_key_column: key column name (default sequence_name) * <li>value_column: hi value column name(default sequence_next_hi_value) * <li>primary_key_value: key value for the current entity (default to the entity's primary table name) * <li>primary_key_length: length of the key column in DB represented as a varchar (default to 255) * <li>max_lo: max low value before increasing hi (default to Short.MAX_VALUE) * </ul> * * @author Emmanuel Bernard * @author <a href="mailto:kr@hbt.de">Klaus Richarz. */ public class MultipleHiLoPerTableGenerator implements PersistentIdentifierGenerator, Configurable { private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, MultipleHiLoPerTableGenerator.class.getName()); public static final String ID_TABLE = "table"; public static final String PK_COLUMN_NAME = "primary_key_column"; public static final String PK_VALUE_NAME = "primary_key_value"; public static final String VALUE_COLUMN_NAME = "value_column"; public static final String PK_LENGTH_NAME = "primary_key_length"; private static final int DEFAULT_PK_LENGTH = 255; public static final String DEFAULT_TABLE = "hibernate_sequences"; private static final String DEFAULT_PK_COLUMN = "sequence_name"; private static final String DEFAULT_VALUE_COLUMN = "sequence_next_hi_value"; private String tableName; private String pkColumnName; private String valueColumnName; private String query; private String insert; private String update; //hilo params public static final String MAX_LO = "max_lo"; private int maxLo; private OptimizerFactory.LegacyHiLoAlgorithmOptimizer hiloOptimizer; private Class returnClass; private int keySize; public String[] sqlCreateStrings(Dialect dialect) throws HibernateException { return new String[] { new StringBuilder( dialect.getCreateTableString() ) .append( ' ' ) .append( tableName ) .append( " ( " ) .append( pkColumnName ) .append( ' ' ) .append( dialect.getTypeName( Types.VARCHAR, keySize, 0, 0 ) ) .append( ", " ) .append( valueColumnName ) .append( ' ' ) .append( dialect.getTypeName( Types.INTEGER ) ) .append( " ) " ) .toString() }; } public String[] sqlDropStrings(Dialect dialect) throws HibernateException { StringBuffer sqlDropString = new StringBuffer( "drop table " ); if ( dialect.supportsIfExistsBeforeTableName() ) { sqlDropString.append( "if exists " ); } sqlDropString.append( tableName ).append( dialect.getCascadeConstraintsString() ); if ( dialect.supportsIfExistsAfterTableName() ) { sqlDropString.append( " if exists" ); } return new String[] { sqlDropString.toString() }; } public Object generatorKey() { return tableName; } public synchronized Serializable generate(final SessionImplementor session, Object obj) { final WorkExecutorVisitable<IntegralDataTypeHolder> work = new AbstractReturningWork Other Hibernate examples (source code examples)Here is a short list of links related to this Hibernate MultipleHiLoPerTableGenerator.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.