public class Oracle12IdentityGenerator extends IdentityGenerator {
@Override
public InsertGeneratedIdentifierDelegate getInsertGeneratedIdentifierDelegate(
PostInsertIdentityPersister persister, Dialect dialect, boolean isGetGeneratedKeysEnabled)
throws HibernateException {
if ( isGetGeneratedKeysEnabled ) {
return new Oracle12GetGeneratedKeysDelegate(persister, dialect);
} else {
return super.getInsertGeneratedIdentifierDelegate(persister, dialect, isGetGeneratedKeysEnabled);
}
}
public static class Oracle12GetGeneratedKeysDelegate extends IdentityGenerator.GetGeneratedKeysDelegate {
private String[] keyColumns;
public Oracle12GetGeneratedKeysDelegate(PostInsertIdentityPersister persister, Dialect dialect) {
super(persister, dialect);
this.keyColumns = getPersister().getRootTableKeyColumnNames();
if (keyColumns.length > 1) {
throw new HibernateException("Identity generator cannot be used with multi-column keys");
}
}
@Override
protected PreparedStatement prepare(String insertSQL, SessionImplementor session) throws SQLException {
return session.getTransactionCoordinator()
.getJdbcCoordinator()
.getStatementPreparer()
.prepareStatement(insertSQL, keyColumns);
}
}
}