Interface JdbcType

All Superinterfaces:
Serializable
All Known Subinterfaces:
AdjustableJdbcType, AggregateJdbcType, JavaTimeJdbcType, SqlTypedJdbcType, StructJdbcType
All Known Implementing Classes:
AbstractCastingPostGISJdbcType, AbstractHANADialect.HANABlobType, AbstractJavaTimeJdbcType, AbstractPostGISJdbcType, AbstractPostgreSQLJsonPGObjectType, AbstractPostgreSQLStructJdbcType, AbstractSqlServerGISType, ArrayJdbcType, BigIntJdbcType, BinaryJdbcType, BlobJdbcType, BooleanJdbcType, CharJdbcType, ClobJdbcType, DateJdbcType, DB2GeometryType, DB2StructJdbcType, DecimalJdbcType, DelayedStructJdbcType, DoubleJdbcType, DurationJdbcType, EnumJdbcType, FloatJdbcType, H2DurationIntervalSecondJdbcType, H2FormatJsonJdbcType, H2GISGeometryType, H2JsonJdbcType, HANAGeometryType, HANAPointType, InstantAsTimestampJdbcType, InstantAsTimestampWithTimeZoneJdbcType, InstantJdbcType, IntegerJdbcType, JsonAsStringJdbcType, JsonJdbcType, LocalDateJdbcType, LocalDateTimeJdbcType, LocalTimeJdbcType, LongNVarcharJdbcType, LongVarbinaryJdbcType, LongVarcharJdbcType, MySQLCastingJsonJdbcType, MySQLEnumJdbcType, MySQLGeometryJdbcType, NCharJdbcType, NClobJdbcType, NullJdbcType, NumericJdbcType, NVarcharJdbcType, ObjectJdbcType, ObjectNullAsBinaryTypeJdbcType, ObjectNullAsNullTypeJdbcType, ObjectNullResolvingJdbcType, OffsetDateTimeJdbcType, OffsetTimeJdbcType, OracleArrayJdbcType, OracleBaseStructJdbcType, OracleBooleanJdbcType, OracleEnumJdbcType, OracleJsonBlobJdbcType, OracleJsonJdbcType, OracleNestedTableJdbcType, OracleOrdinalEnumJdbcType, OracleReflectionStructJdbcType, OracleStructJdbcType, OracleXmlJdbcType, OrdinalEnumJdbcType, PGCastingGeographyJdbcType, PGCastingGeometryJdbcType, PGGeographyJdbcType, PGGeometryJdbcType, PostgreSQLArrayJdbcType, PostgreSQLCastingInetJdbcType, PostgreSQLCastingIntervalSecondJdbcType, PostgreSQLCastingJsonJdbcType, PostgreSQLEnumJdbcType, PostgreSQLInetJdbcType, PostgreSQLIntervalSecondJdbcType, PostgreSQLJsonPGObjectJsonbType, PostgreSQLJsonPGObjectJsonType, PostgreSQLOrdinalEnumJdbcType, PostgreSQLStructCastingJdbcType, PostgreSQLStructPGObjectJdbcType, PostgreSQLUUIDJdbcType, RealJdbcType, RowIdJdbcType, SDOGeometryType, SmallIntJdbcType, SqlServerGeographyType, SqlServerGeometryType, StructJdbcType, TimeAsTimestampWithTimeZoneJdbcType, TimeJdbcType, TimestampJdbcType, TimestampUtcAsInstantJdbcType, TimestampUtcAsJdbcTimestampJdbcType, TimestampUtcAsOffsetDateTimeJdbcType, TimestampWithTimeZoneJdbcType, TimeUtcAsJdbcTimeJdbcType, TimeUtcAsOffsetTimeJdbcType, TimeWithTimeZoneJdbcType, TinyIntAsSmallIntJdbcType, TinyIntJdbcType, UserTypeSqlTypeAdapter, UUIDJdbcType, VarbinaryJdbcType, VarcharJdbcType, VarcharUUIDJdbcType, XmlAsStringJdbcType, XmlJdbcType, ZonedDateTimeJdbcType

public interface JdbcType extends Serializable
Descriptor for the SQL/JDBC side of a value mapping. A JdbcType is always coupled with a JavaType to describe the typing aspects of an attribute mapping from Java to JDBC.

An instance of this type need not correspond directly to a SQL column type on a particular database. Rather, a JdbcType defines how values are read from and written to JDBC. Therefore, implementations of this interface map more directly to the JDBC type codes defined by Types and SqlTypes.

Every JdbcType has a ValueBinder and a ValueExtractor which, respectively, do the hard work of writing values to parameters of a JDBC PreparedStatement, and reading values from the columns of a JDBC ResultSet.

The JDBC type code ultimately determines, in collaboration with the SQL dialect, the SQL column type generated by Hibernate's schema export tool.

A JDBC type may be selected when mapping an entity attribute using the JdbcType annotation, or, indirectly, using the JdbcTypeCode annotation.

Custom implementations should be registered with the JdbcTypeRegistry at startup. The built-in implementations are registered automatically.

  • Method Details

    • getFriendlyName

      default String getFriendlyName()
      A "friendly" name for use in logging
    • getJdbcTypeCode

      int getJdbcTypeCode()
      The JDBC type code used when interacting with JDBC APIs.

      For example, it's used when calling PreparedStatement.setNull(int, int).

      Returns:
      a JDBC type code
    • getDefaultSqlTypeCode

      default int getDefaultSqlTypeCode()
      A JDBC type code that identifies the SQL column type.

      This value might be different from getDdlTypeCode() if the actual type e.g. JSON is emulated through a type like CLOB.

      Returns:
      a JDBC type code
    • getDdlTypeCode

      default int getDdlTypeCode()
      A JDBC type code that identifies the SQL column type to be used for schema generation.

      This value is passed to DdlTypeRegistry.getTypeName(int, Size, Type) to obtain the SQL column type.

      Returns:
      a JDBC type code
      Since:
      6.2
    • getJdbcRecommendedJavaTypeMapping

      default <T> JavaType<T> getJdbcRecommendedJavaTypeMapping(Integer precision, Integer scale, TypeConfiguration typeConfiguration)
    • getJdbcLiteralFormatter

      default <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaType<T> javaType)
      Obtain a formatter object capable of rendering values of the given Java type as SQL literals of the type represented by this object.
    • getBinder

      <X> ValueBinder<X> getBinder(JavaType<X> javaType)
      Obtain a binder object capable of binding values of the given Java type to parameters of a JDBC PreparedStatement.
      Parameters:
      javaType - The descriptor describing the types of Java values to be bound
      Returns:
      The appropriate binder.
    • getExtractor

      <X> ValueExtractor<X> getExtractor(JavaType<X> javaType)
      Obtain an extractor object capable of extracting values of the given Java type from a JDBC ResultSet.
      Parameters:
      javaType - The descriptor describing the types of Java values to be extracted
      Returns:
      The appropriate extractor
    • getPreferredJavaTypeClass

      @Incubating default Class<?> getPreferredJavaTypeClass(WrapperOptions options)
      The Java type class that is preferred by the binder or null.
    • getCheckCondition

      default String getCheckCondition(String columnName, JavaType<?> javaType, BasicValueConverter<?,?> converter, Dialect dialect)
      The check constraint that should be added to the column definition in generated DDL.
      Parameters:
      columnName - the name of the column
      javaType - the JavaType of the mapped column
      converter - the converter, if any, or null
      dialect - the SQL Dialect
      Returns:
      a check constraint condition or null
      Since:
      6.2
    • wrapTopLevelSelectionExpression

      @Incubating default Expression wrapTopLevelSelectionExpression(Expression expression)
      Wraps the top level selection expression to be able to read values with this JdbcType's ValueExtractor.
      Since:
      6.2
    • wrapWriteExpression

      @Incubating default String wrapWriteExpression(String writeExpression, Dialect dialect)
      Wraps the write expression to be able to write values with this JdbcType's ValueBinder.
      Since:
      6.2
    • appendWriteExpression

      @Incubating default void appendWriteExpression(String writeExpression, SqlAppender appender, Dialect dialect)
      Append the write expression wrapped in a way to be able to write values with this JdbcType's ValueBinder.
      Since:
      6.2
    • isInteger

      default boolean isInteger()
    • isFloat

      default boolean isFloat()
    • isDecimal

      default boolean isDecimal()
    • isNumber

      default boolean isNumber()
    • isBinary

      default boolean isBinary()
    • isString

      default boolean isString()
    • isStringLike

      default boolean isStringLike()
    • isTemporal

      default boolean isTemporal()
    • isLob

      default boolean isLob()
    • isLob

      static boolean isLob(int jdbcTypeCode)
    • isLobOrLong

      default boolean isLobOrLong()
    • isLobOrLong

      static boolean isLobOrLong(int jdbcTypeCode)
    • isNationalized

      default boolean isNationalized()
    • isNationalized

      static boolean isNationalized(int jdbcTypeCode)
    • isInterval

      default boolean isInterval()
    • isDuration

      default boolean isDuration()
    • isArray

      default boolean isArray()
    • isArray

      static boolean isArray(int jdbcTypeCode)
    • getCastType

      default CastType getCastType()
    • getCastType

      static CastType getCastType(int typeCode)
    • registerOutParameter

      default void registerOutParameter(CallableStatement callableStatement, String name) throws SQLException
      Register the OUT parameter on the CallableStatement with the given name for this JdbcType.
      Throws:
      SQLException
      Since:
      6.2
    • registerOutParameter

      default void registerOutParameter(CallableStatement callableStatement, int index) throws SQLException
      Register the OUT parameter on the CallableStatement with the given index for this JdbcType.
      Throws:
      SQLException
      Since:
      6.2
    • addAuxiliaryDatabaseObjects

      @Incubating @Deprecated(forRemoval=true) default void addAuxiliaryDatabaseObjects(JavaType<?> javaType, Size columnSize, Database database, TypeConfiguration typeConfiguration)
      Deprecated, for removal: This API element is subject to removal in a future version.
    • addAuxiliaryDatabaseObjects

      @Incubating default void addAuxiliaryDatabaseObjects(JavaType<?> javaType, Size columnSize, Database database, JdbcTypeIndicators context)
      Add auxiliary database objects for this JdbcType to the Database object.
      Since:
      6.5
    • getExtraCreateTableInfo

      @Incubating default String getExtraCreateTableInfo(JavaType<?> javaType, String columnName, String tableName, Database database)
    • isComparable

      @Incubating default boolean isComparable()
    • hasDatePart

      @Incubating default boolean hasDatePart()
    • hasTimePart

      @Incubating default boolean hasTimePart()
    • isStringLikeExcludingClob

      @Incubating default boolean isStringLikeExcludingClob()
    • isSpatial

      @Incubating default boolean isSpatial()
    • isBoolean

      @Incubating default boolean isBoolean()
    • isSmallInteger

      @Incubating default boolean isSmallInteger()