HHH-10422 - Backport HHH-9983 to fix identity IDs using Oracle12cDialect in 5.0
This commit is contained in:
parent
1ddcc7075f
commit
debc06d54e
|
@ -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 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
Loading…
Reference in New Issue