List of usage examples for org.hibernate.id IdentifierGeneratorHelper getIntegralDataTypeHolder
public static IntegralDataTypeHolder getIntegralDataTypeHolder(Class integralType)
From source file:com.literatejava.hibernate.allocator.LinearBlockAllocator.java
License:Open Source License
public void configure(Type type, Properties params, Dialect dialect) { ObjectNameNormalizer normalizer = (ObjectNameNormalizer) params.get(IDENTIFIER_NORMALIZER); this.tableName = ConfigurationHelper.getString(ALLOC_TABLE, params, DEFAULT_TABLE); this.sequenceColumn = ConfigurationHelper.getString(SEQUENCE_COLUMN, params, DEFAULT_SEQUENCE_COLUMN); this.allocColumn = ConfigurationHelper.getString(ALLOC_COLUMN, params, DEFAULT_ALLOC_COLUMN); // get SequenceName; default to Entities' TableName. // -/*from w w w.j a v a2s . c o m*/ this.sequenceName = ConfigurationHelper.getString(SEQUENCE_NAME, params, params.getProperty(PersistentIdentifierGenerator.TABLE)); if (sequenceName == null) { throw new IdentifierGenerationException( "LinearBlockAllocator: '" + SEQUENCE_NAME + "' must be specified"); } this.blockSize = ConfigurationHelper.getInt(BLOCK_SIZE, params, DEFAULT_BLOCK_SIZE); if (blockSize < 1) { blockSize = 1; } // qualify Table Name, if necessary; // -- if (tableName.indexOf('.') < 0) { String schemaName = normalizer.normalizeIdentifierQuoting(params.getProperty(SCHEMA)); String catalogName = normalizer.normalizeIdentifierQuoting(params.getProperty(CATALOG)); this.tableName = Table.qualify(catalogName, schemaName, tableName); } // build SQL strings; // -- use appendLockHint(LockMode) for now, as that is how Hibernate's generators do it. // this.query = "select " + allocColumn + " from " + dialect.appendLockHint(LockMode.PESSIMISTIC_WRITE, tableName) + " where " + sequenceColumn + " = ?" + dialect.getForUpdateString(); this.update = "update " + tableName + " set " + allocColumn + " = ? where " + sequenceColumn + " = ? and " + allocColumn + " = ?"; // setup Return Type & Result Holder. // -- this.returnType = type; this.returnClass = type.getReturnedClass(); this.resultFactory = IdentifierGeneratorHelper.getIntegralDataTypeHolder(returnClass); // done. }
From source file:de.innovationgate.webgate.api.mysql.GaleraClusterTableGenerator.java
License:Open Source License
@Override public synchronized Serializable generate(final SessionImplementor session, Object obj) { final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class).getSqlStatementLogger(); return optimizer.generate(new AccessCallback() { @Override/*from w w w. jav a 2 s .co m*/ public IntegralDataTypeHolder getNextValue() { return session.getTransactionCoordinator().getTransaction().createIsolationDelegate() .delegateWork(new AbstractReturningWork<IntegralDataTypeHolder>() { @Override public IntegralDataTypeHolder execute(Connection connection) throws SQLException { IntegralDataTypeHolder value = IdentifierGeneratorHelper .getIntegralDataTypeHolder(identifierType.getReturnedClass()); int rows = 0; do { statementLogger.logStatement(selectQuery, FormatStyle.BASIC.getFormatter()); PreparedStatement selectPS = connection.prepareStatement(selectQuery); try { selectPS.setString(1, segmentValue); ResultSet selectRS = selectPS.executeQuery(); if (!selectRS.next()) { value.initialize(initialValue); PreparedStatement insertPS = null; try { statementLogger.logStatement(insertQuery, FormatStyle.BASIC.getFormatter()); insertPS = connection.prepareStatement(insertQuery); insertPS.setString(1, segmentValue); value.bind(insertPS, 2); insertPS.execute(); } finally { if (insertPS != null) { insertPS.close(); } } } else { value.initialize(selectRS, 1); } selectRS.close(); } catch (SQLException e) { LOG.unableToReadOrInitHiValue(e); throw e; } finally { selectPS.close(); } statementLogger.logStatement(updateQuery, FormatStyle.BASIC.getFormatter()); PreparedStatement updatePS = connection.prepareStatement(updateQuery); try { final IntegralDataTypeHolder updateValue = value.copy(); if (optimizer.applyIncrementSizeToSourceValues()) { updateValue.add(incrementSize); } else { updateValue.increment(); } updateValue.bind(updatePS, 1); value.bind(updatePS, 2); updatePS.setString(3, segmentValue); rows = updatePS.executeUpdate(); } catch (SQLException e) { // Another cluster node concurrently fetched and changed the ID. Just retry. if (e.getErrorCode() == 1213) { } else { LOG.unableToUpdateQueryHiValue(tableName, e); throw e; } } finally { updatePS.close(); } } while (rows == 0); accessCount++; return value; } }, true); } }); }
From source file:net.e6tech.elements.persist.hibernate.ModifiedTableGenerator.java
License:Apache License
private IntegralDataTypeHolder makeValue() { return IdentifierGeneratorHelper.getIntegralDataTypeHolder(identifierType.getReturnedClass()); }
From source file:org.apereo.portal.utils.HibernateStyleCounterStore.java
License:Apache License
private int getNextIdInternal(final Optimizer optimizer, final String counterName) { return (Integer) optimizer.generate(new AccessCallback() { @Override/*from w w w . j a va 2 s. c om*/ public IntegralDataTypeHolder getNextValue() { IntegralDataTypeHolder rslt = null; for (int i = 0; rslt == null && i < MAX_ATTEMPTS; i++) { rslt = transactionOperations.execute(new TransactionCallback<IntegralDataTypeHolder>() { @Override public IntegralDataTypeHolder doInTransaction(TransactionStatus status) { final IntegralDataTypeHolder value = IdentifierGeneratorHelper .getIntegralDataTypeHolder(identifierType.getReturnedClass()); //Try and load the current value, returns true if the expected row exists, null otherwise final boolean selected = jdbcOperations.query(SELECT_QUERY, new ResultSetExtractor<Boolean>() { @Override public Boolean extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { value.initialize(rs, 1); return true; } return false; } }, counterName); //No row exists for the counter, insert it if (!selected) { value.initialize(initialValue); jdbcOperations.update(INSERT_QUERY, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setString(1, counterName); value.bind(ps, 2); } }); } //Increment the counter row value final IntegralDataTypeHolder updateValue = value.copy(); if (optimizer.applyIncrementSizeToSourceValues()) { updateValue.add(incrementSize); } else { updateValue.increment(); } //Update the counter row, if rows returns 0 the update failed due to a race condition, it will be retried int rowsAltered = jdbcOperations.update(UPDATE_QUERY, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { updateValue.bind(ps, 1); ps.setString(2, counterName); value.bind(ps, 3); } }); return rowsAltered > 0 ? value // Success : null; // Failed; try again... } }); } // End for loop if (rslt == null) { throw new RuntimeException( "Failed to fetch a new batch of sequence values after " + MAX_ATTEMPTS + " tries"); } return rslt; } }); }
From source file:org.jasig.portal.utils.HibernateStyleCounterStore.java
License:Apache License
private int getNextIdInternal(final Optimizer optimizer, final String counterName) { return (Integer) optimizer.generate(new AccessCallback() { @Override// w w w .jav a2 s.c o m public IntegralDataTypeHolder getNextValue() { return transactionOperations.execute(new TransactionCallback<IntegralDataTypeHolder>() { @Override public IntegralDataTypeHolder doInTransaction(TransactionStatus status) { final IntegralDataTypeHolder value = IdentifierGeneratorHelper .getIntegralDataTypeHolder(identifierType.getReturnedClass()); int rows; do { //Try and load the current value, returns true if the exepected row exists, null otherwise final boolean selected = jdbcOperations.query(SELECT_QUERY, new ResultSetExtractor<Boolean>() { @Override public Boolean extractData(ResultSet rs) throws SQLException, DataAccessException { if (rs.next()) { value.initialize(rs, 1); return true; } return false; } }, counterName); //No row exists for the counter, insert it if (!selected) { value.initialize(initialValue); jdbcOperations.update(INSERT_QUERY, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setString(1, counterName); value.bind(ps, 2); } }); } //Increment the counter row value final IntegralDataTypeHolder updateValue = value.copy(); if (optimizer.applyIncrementSizeToSourceValues()) { updateValue.add(incrementSize); } else { updateValue.increment(); } //Update the counter row, if rows returns 0 the update failed due to a race condition, it will be retried rows = jdbcOperations.update(UPDATE_QUERY, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { updateValue.bind(ps, 1); ps.setString(2, counterName); value.bind(ps, 3); } }); } while (rows == 0); return value; } }); } }); }