HHH-10422 - Backport HHH-9983 to fix identity IDs using Oracle12cDialect in 5.0

This commit is contained in:
Steve Ebersole 2016-01-13 11:31:09 -06:00
parent 1ddcc7075f
commit debc06d54e
5 changed files with 35 additions and 131 deletions

View File

@ -25,8 +25,6 @@ import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.Set; import java.util.Set;
import org.jboss.logging.Logger;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.LockMode; import org.hibernate.LockMode;
import org.hibernate.LockOptions; import org.hibernate.LockOptions;
@ -106,6 +104,8 @@ import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.descriptor.sql.ClobTypeDescriptor; import org.hibernate.type.descriptor.sql.ClobTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor; import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
import org.jboss.logging.Logger;
/** /**
* Represents a dialect of SQL implemented by a particular RDBMS. Subclasses implement Hibernate compatibility * Represents a dialect of SQL implemented by a particular RDBMS. Subclasses implement Hibernate compatibility
* with different systems. Subclasses should provide a public default constructor that register a set of type * with different systems. Subclasses should provide a public default constructor that register a set of type
@ -751,108 +751,6 @@ public abstract class Dialect implements ConversionContext {
return new IdentityColumnSupportImpl(); return new IdentityColumnSupportImpl();
} }
/**
* Does this dialect support identity column key generation?
*
* @return True if IDENTITY columns are supported; false otherwise.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public boolean supportsIdentityColumns() {
return getIdentityColumnSupport().supportsIdentityColumns();
}
/**
* Does the dialect support some form of inserting and selecting
* the generated IDENTITY value all in the same statement.
*
* @return True if the dialect supports selecting the just
* generated IDENTITY in the insert statement.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public boolean supportsInsertSelectIdentity() {
return getIdentityColumnSupport().supportsInsertSelectIdentity();
}
/**
* Whether this dialect have an Identity clause added to the data type or a
* completely separate identity data type
*
* @return boolean
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public boolean hasDataTypeInIdentityColumn() {
return getIdentityColumnSupport().hasDataTypeInIdentityColumn();
}
/**
* Provided we {@link #supportsInsertSelectIdentity}, then attach the
* "select identity" clause to the insert statement.
* <p/>
* Note, if {@link #supportsInsertSelectIdentity} == false then
* the insert-string should be returned without modification.
*
* @param insertString The insert command
* @return The insert command with any necessary identity select
* clause attached.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public String appendIdentitySelectToInsert(String insertString) {
return getIdentityColumnSupport().appendIdentitySelectToInsert( insertString );
}
/**
* Get the select command to use to retrieve the last generated IDENTITY
* value for a particular table
*
* @param table The table into which the insert was done
* @param column The PK column.
* @param type The {@link java.sql.Types} type code.
* @return The appropriate select command
* @throws MappingException If IDENTITY generation is not supported.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public String getIdentitySelectString(String table, String column, int type) throws MappingException {
return getIdentityColumnSupport().getIdentitySelectString( table, column, type );
}
/**
* The syntax used during DDL to define a column as being an IDENTITY of
* a particular type.
*
* @param type The {@link java.sql.Types} type code.
* @return The appropriate DDL fragment.
* @throws MappingException If IDENTITY generation is not supported.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public String getIdentityColumnString(int type) throws MappingException {
return getIdentityColumnSupport().getIdentityColumnString( type );
}
/**
* The keyword used to insert a generated value into an identity column (or null).
* Need if the dialect does not support inserts that specify no column values.
*
* @return The appropriate keyword.
*
* @deprecated use {@link IdentityColumnSupport} method instead
*/
@Deprecated
public String getIdentityInsertString() {
return getIdentityColumnSupport().getIdentityInsertString();
}
// SEQUENCE support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // SEQUENCE support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/** /**

View File

@ -6,6 +6,13 @@
*/ */
package org.hibernate.dialect; package org.hibernate.dialect;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Iterator;
import java.util.Map;
import org.hibernate.HibernateException; import org.hibernate.HibernateException;
import org.hibernate.LockOptions; import org.hibernate.LockOptions;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
@ -24,13 +31,6 @@ import org.hibernate.tool.schema.internal.StandardIndexExporter;
import org.hibernate.tool.schema.spi.Exporter; import org.hibernate.tool.schema.spi.Exporter;
import org.hibernate.type.StandardBasicTypes; import org.hibernate.type.StandardBasicTypes;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Iterator;
import java.util.Map;
/** /**
* A dialect for the Teradata database * A dialect for the Teradata database
*/ */
@ -57,11 +57,6 @@ public class Teradata14Dialect extends TeradataDialect {
TeraIndexExporter = new TeradataIndexExporter( this ); TeraIndexExporter = new TeradataIndexExporter( this );
} }
@Override
public boolean supportsIdentityColumns() {
return true;
}
@Override @Override
public String getAddColumnString() { public String getAddColumnString() {
return "Add"; return "Add";

View File

@ -105,18 +105,17 @@ public class TeradataDialect extends Dialect implements IdTableSupport {
* *
* @return empty string ... Teradata does not support <tt>FOR UPDATE<tt> syntax * @return empty string ... Teradata does not support <tt>FOR UPDATE<tt> syntax
*/ */
@Override
public String getForUpdateString() { public String getForUpdateString() {
return ""; return "";
} }
public boolean supportsIdentityColumns() { @Override
return false;
}
public boolean supportsSequences() { public boolean supportsSequences() {
return false; return false;
} }
@Override
public String getAddColumnString() { public String getAddColumnString() {
return "Add Column"; return "Add Column";
} }
@ -171,22 +170,27 @@ public class TeradataDialect extends Dialect implements IdTableSupport {
return super.getTypeName( code, length, p, s ); return super.getTypeName( code, length, p, s );
} }
@Override
public boolean supportsCascadeDelete() { public boolean supportsCascadeDelete() {
return false; return false;
} }
@Override
public boolean supportsCircularCascadeDeleteConstraints() { public boolean supportsCircularCascadeDeleteConstraints() {
return false; return false;
} }
@Override
public boolean areStringComparisonsCaseInsensitive() { public boolean areStringComparisonsCaseInsensitive() {
return true; return true;
} }
@Override
public boolean supportsEmptyInList() { public boolean supportsEmptyInList() {
return false; return false;
} }
@Override
public String getSelectClauseNullString(int sqlType) { public String getSelectClauseNullString(int sqlType) {
String v = "null"; String v = "null";
@ -232,29 +236,31 @@ public class TeradataDialect extends Dialect implements IdTableSupport {
return v; return v;
} }
@Override
public String getCreateMultisetTableString() { public String getCreateMultisetTableString() {
return "create multiset table "; return "create multiset table ";
} }
@Override
public boolean supportsLobValueChangePropogation() { public boolean supportsLobValueChangePropogation() {
return false; return false;
} }
@Override
public boolean doesReadCommittedCauseWritersToBlockReaders() { public boolean doesReadCommittedCauseWritersToBlockReaders() {
return true; return true;
} }
@Override
public boolean doesRepeatableReadCauseReadersToBlockWriters() { public boolean doesRepeatableReadCauseReadersToBlockWriters() {
return true; return true;
} }
@Override
public boolean supportsBindAsCallableArgument() { public boolean supportsBindAsCallableArgument() {
return false; return false;
} }
/* (non-Javadoc)
* @see org.hibernate.dialect.Dialect#getInExpressionCountLimit()
*/
@Override @Override
public int getInExpressionCountLimit() { public int getInExpressionCountLimit() {
return PARAM_LIST_SIZE_LIMIT; return PARAM_LIST_SIZE_LIMIT;

View File

@ -23,7 +23,7 @@ public interface IdentityColumnSupport {
* *
* @return True if IDENTITY columns are supported; false otherwise. * @return True if IDENTITY columns are supported; false otherwise.
*/ */
public boolean supportsIdentityColumns(); boolean supportsIdentityColumns();
/** /**
* Does the dialect support some form of inserting and selecting * Does the dialect support some form of inserting and selecting
@ -32,7 +32,7 @@ public interface IdentityColumnSupport {
* @return True if the dialect supports selecting the just * @return True if the dialect supports selecting the just
* generated IDENTITY in the insert statement. * generated IDENTITY in the insert statement.
*/ */
public boolean supportsInsertSelectIdentity(); boolean supportsInsertSelectIdentity();
/** /**
* Whether this dialect have an Identity clause added to the data type or a * Whether this dialect have an Identity clause added to the data type or a
@ -40,7 +40,7 @@ public interface IdentityColumnSupport {
* *
* @return boolean * @return boolean
*/ */
public boolean hasDataTypeInIdentityColumn(); boolean hasDataTypeInIdentityColumn();
/** /**
* Provided we {@link #supportsInsertSelectIdentity}, then attach the * Provided we {@link #supportsInsertSelectIdentity}, then attach the
@ -54,7 +54,7 @@ public interface IdentityColumnSupport {
* @return The insert command with any necessary identity select * @return The insert command with any necessary identity select
* clause attached. * clause attached.
*/ */
public String appendIdentitySelectToInsert(String insertString); String appendIdentitySelectToInsert(String insertString);
/** /**
* Get the select command to use to retrieve the last generated IDENTITY * Get the select command to use to retrieve the last generated IDENTITY
@ -68,7 +68,7 @@ public interface IdentityColumnSupport {
* *
* @throws MappingException If IDENTITY generation is not supported. * @throws MappingException If IDENTITY generation is not supported.
*/ */
public String getIdentitySelectString(String table, String column, int type) throws MappingException; String getIdentitySelectString(String table, String column, int type) throws MappingException;
/** /**
@ -81,7 +81,7 @@ public interface IdentityColumnSupport {
* *
* @throws MappingException If IDENTITY generation is not supported. * @throws MappingException If IDENTITY generation is not supported.
*/ */
public String getIdentityColumnString(int type) throws MappingException; String getIdentityColumnString(int type) throws MappingException;
/** /**
@ -90,7 +90,7 @@ public interface IdentityColumnSupport {
* *
* @return The appropriate keyword. * @return The appropriate keyword.
*/ */
public String getIdentityInsertString(); String getIdentityInsertString();
/** /**
* The Delegate for dealing with IDENTITY columns using JDBC3 getGeneratedKeys * The Delegate for dealing with IDENTITY columns using JDBC3 getGeneratedKeys
@ -100,7 +100,7 @@ public interface IdentityColumnSupport {
* *
* @return the dialect specific GetGeneratedKeys delegate * @return the dialect specific GetGeneratedKeys delegate
*/ */
public GetGeneratedKeysDelegate buildGetGeneratedKeysDelegate( GetGeneratedKeysDelegate buildGetGeneratedKeysDelegate(
PostInsertIdentityPersister persister, PostInsertIdentityPersister persister,
Dialect dialect); Dialect dialect);
} }

View File

@ -10,6 +10,11 @@ package org.hibernate.dialect.identity;
* @author Andrea Boriero * @author Andrea Boriero
*/ */
public class Teradata14IdentityColumnSupport extends IdentityColumnSupportImpl { public class Teradata14IdentityColumnSupport extends IdentityColumnSupportImpl {
@Override
public boolean supportsIdentityColumns() {
return true;
}
@Override @Override
public String getIdentityColumnString(int type) { public String getIdentityColumnString(int type) {
return "generated by default as identity not null"; return "generated by default as identity not null";