Hello,
I'm trying to update this class to be hibenate 4 compatible. However, I'm faced to the following problems :
Code:
return session.getBatcher().prepareStatement(insertSQL, keyColumns);
The getBatcher() is no more available from session, but apparently we have to take it from BuilderBatcher (https://community.jboss.org/wiki/HibernateCoreMigrationGuide40)
However how can I construct a BuilderBatcher ?
Code:
IdentifierGeneratorHelper.getGeneratedIdentity(insert.getGeneratedKeys(), getPersister().getIdentifierType());
the getGeneratedIdentity now need the resultset as the first parameter, but how can I provide it ?
Here is my class used
Code:
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.batch.spi.BatchBuilder;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.AbstractPostInsertGenerator;
import org.hibernate.id.IdentifierGeneratorHelper;
import org.hibernate.id.PostInsertIdentityPersister;
import org.hibernate.id.SequenceIdentityGenerator.NoCommentsInsert;
import org.hibernate.id.insert.AbstractReturningDelegate;
import org.hibernate.id.insert.IdentifierGeneratingInsert;
import org.hibernate.id.insert.InsertGeneratedIdentifierDelegate;
/**
* A generator with immediate retrieval through JDBC3 {@link java.sql.Connection#prepareStatement(String, String[]) getGeneratedKeys}.
* The value of the identity column must be set from a "before insert trigger"
* <p/>
* This generator only known to work with newer Oracle drivers compiled for
* JDK 1.4 (JDBC3). The minimum version is 10.2.0.1
* <p/>
* Note: Due to a bug in Oracle drivers, sql comments on these insert statements
* are completely disabled.
*
* @author Jean-Pol Landrain
*/
public class TriggerAssignedIdentityGenerator extends AbstractPostInsertGenerator {
public InsertGeneratedIdentifierDelegate getInsertGeneratedIdentifierDelegate(PostInsertIdentityPersister persister, Dialect dialect, boolean isGetGeneratedKeysEnabled) throws HibernateException {
return new Delegate(persister, dialect);
}
public static class Delegate extends AbstractReturningDelegate {
private final Dialect dialect;
private final String[] keyColumns;
public Delegate(PostInsertIdentityPersister persister, Dialect dialect) {
super(persister);
this.dialect = dialect;
this.keyColumns = getPersister().getRootTableKeyColumnNames();
if (keyColumns.length > 1) {
throw new HibernateException("trigger assigned identity generator cannot be used with multi-column keys");
}
}
public IdentifierGeneratingInsert prepareIdentifierGeneratingInsert() {
NoCommentsInsert insert = new NoCommentsInsert(dialect);
return insert;
}
protected PreparedStatement prepare(String insertSQL, SessionImplementor session) throws SQLException {
BatchBuilder bb =
return session.getBatcher().prepareStatement(insertSQL, keyColumns);
}
protected Serializable executeAndExtract(PreparedStatement insert) throws SQLException {
insert.executeUpdate();
return IdentifierGeneratorHelper.getGeneratedIdentity(insert.getGeneratedKeys(), getPersister().getIdentifierType());
}
}