Interface JavaType<T>

All Superinterfaces:
Serializable
All Known Subinterfaces:
BasicJavaType<T>, PrimitiveJavaType<J>, TemporalJavaType<T>, VersionJavaType<T>
All Known Implementing Classes:
AbstractArrayJavaType, AbstractClassJavaType, AbstractJavaType, AbstractTemporalJavaType, ArrayJavaType, BasicCollectionJavaType, BigDecimalJavaType, BigIntegerJavaType, BlobJavaType, BooleanJavaType, BooleanPrimitiveArrayJavaType, ByteArrayJavaType, ByteJavaType, CalendarDateJavaType, CalendarJavaType, CalendarTimeJavaType, CharacterArrayJavaType, CharacterJavaType, ClassJavaType, ClobJavaType, CollectionJavaType, CompositeUserTypeJavaTypeWrapper, CurrencyJavaType, DateJavaType, DoubleJavaType, DoublePrimitiveArrayJavaType, DurationJavaType, DynamicModelJavaType, EmbeddableAggregateJavaType, EntityJavaType, EnumJavaType, FloatJavaType, FloatPrimitiveArrayJavaType, FormatMapperBasedJavaType, GeolatteGeometryJavaType, InetAddressJavaType, InstantJavaType, IntegerJavaType, IntegerPrimitiveArrayJavaType, JavaTypeBasicAdaptor, JdbcDateJavaType, JdbcTimeJavaType, JdbcTimestampJavaType, JsonJavaType, JTSGeometryJavaType, LocalDateJavaType, LocalDateTimeJavaType, LocaleJavaType, LocalTimeJavaType, LongJavaType, LongPrimitiveArrayJavaType, MapEntryJavaType, NClobJavaType, ObjectArrayJavaType, ObjectJavaType, OffsetDateTimeJavaType, OffsetTimeJavaType, PrimitiveByteArrayJavaType, PrimitiveCharacterArrayJavaType, SerializableJavaType, ShortJavaType, ShortPrimitiveArrayJavaType, StringJavaType, TimeZoneJavaType, UnknownBasicJavaType, UrlJavaType, UserTypeJavaTypeWrapper, UserTypeVersionJavaTypeWrapper, UUIDJavaType, XmlJavaType, YearJavaType, ZonedDateTimeJavaType, ZoneIdJavaType, ZoneOffsetJavaType

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

An instance of this interface represents a certain Java class or interface which may occur as the type of a persistent property or field of an entity class.

A JavaType decides how instances of the Java type are compared for equality and order, and it knows how to convert to and from various different representations that might be requested by its partner JdbcType.

Every JavaType has a MutabilityPlan which defines how instances of the type are cloned, and how they are disassembled to and assembled from their representation in the second-level cache.

Even though it's strictly only responsible for Java aspects of the mapping, a JavaType usually does come with a recommendation for a friendly JdbcType it works particularly well with, along with a default length, precision, and scale for mapped columns.

A Java type may be selected when mapping an entity attribute using the JavaType annotation, though this is typically unnecessary.

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

See Also:
  • Method Details

    • getJavaType

      default Type getJavaType()
      Get the Java type (a Type object) described by this JavaType.
      See Also:
    • getJavaTypeClass

      default Class<T> getJavaTypeClass()
      Get the Java type (the Class object) described by this JavaType.
      See Also:
    • getTypeName

      default String getTypeName()
      Get the name of the Java type.
    • isInstance

      default boolean isInstance(Object value)
      Is the given value an instance of the described type?

      Usually just getJavaTypeClass().isInstance(value), but some descriptors need specialized semantics, for example, the descriptors for java.sql.Date, java.sql.Time, and java.sql.Timestamp.

    • getMutabilityPlan

      default MutabilityPlan<T> getMutabilityPlan()
      Retrieve the mutability plan for this Java type.
    • getReplacement

      default T getReplacement(T original, T target, SharedSessionContractImplementor session)
    • getDefaultValue

      default T getDefaultValue()
      Get this Java type's default value.
      Returns:
      The default value.
    • getRecommendedJdbcType

      JdbcType getRecommendedJdbcType(JdbcTypeIndicators context)
      Obtain the "recommended" SQL type descriptor for this Java type. Often, but not always, the source of this recommendation is the JDBC specification.
      Parameters:
      context - Contextual information
      Returns:
      The recommended SQL type descriptor
    • getDefaultSqlLength

      default long getDefaultSqlLength(Dialect dialect, JdbcType jdbcType)
      The default column length when this Java type is mapped to a SQL data type which is parametrized by length, for example Types.VARCHAR.
      Returns:
      Size.DEFAULT_LENGTH unless overridden
    • getLongSqlLength

      default long getLongSqlLength()
      The default column length when this Java type is mapped to a column of type Types.LONGVARCHAR or Types.LONGVARBINARY.
      Returns:
      Size.LONG_LENGTH unless overridden
    • getDefaultSqlPrecision

      default int getDefaultSqlPrecision(Dialect dialect, JdbcType jdbcType)
      The default column precision when this Java type is mapped to a SQL data type which is parametrized by precision, for example Types.DECIMAL.
      Returns:
      Size.DEFAULT_PRECISION unless overridden
    • getDefaultSqlScale

      default int getDefaultSqlScale(Dialect dialect, JdbcType jdbcType)
      The default column scale when this Java type is mapped to a SQL data type which is parametrized by scale, for example Types.DECIMAL.
      Returns:
      Size.DEFAULT_SCALE unless overridden
    • getComparator

      default Comparator<T> getComparator()
      Retrieve the natural comparator for this type.
    • extractHashCode

      default int extractHashCode(T value)
      Extract a proper hash code for the given value.
      Parameters:
      value - The value for which to extract a hash code.
      Returns:
      The extracted hash code.
    • areEqual

      default boolean areEqual(T one, T another)
      Determine if two instances are equal
      Parameters:
      one - One instance
      another - The other instance
      Returns:
      True if the two are considered equal; false otherwise.
    • useObjectEqualsHashCode

      default boolean useObjectEqualsHashCode()
      Whether to use Object.equals(Object) and Object.hashCode() or areEqual(Object, Object) and extractHashCode(Object) for objects of this java type. This is useful to avoid mega-morphic callsites.
    • extractLoggableRepresentation

      default String extractLoggableRepresentation(@Nullable T value)
      Extract a loggable representation of the given value.
      Parameters:
      value - The value for which to extract a loggable representation.
      Returns:
      The loggable representation
    • toString

      default String toString(T value)
    • fromString

      T fromString(CharSequence string)
    • appendEncodedString

      default void appendEncodedString(SqlAppender sb, T value)
      Appends the value to the SqlAppender in an encoded format that can be decoded again by fromEncodedString(CharSequence, int, int). Implementers do not need to care about escaping. This is similar to toString(Object), with the difference that the aim of this method is encoding to the appender.
      Since:
      6.2
    • fromEncodedString

      default T fromEncodedString(CharSequence charSequence, int start, int end)
      Reads the encoded value from the char sequence start index until the end index and returns the decoded value. Implementers do not need to care about escaping. This is similar to fromString(CharSequence), with the difference that the aim of this method is decoding from a range within an existing char sequence.
      Since:
      6.2
    • unwrap

      <X> X unwrap(T value, Class<X> type, WrapperOptions options)
      Unwrap an instance of our handled Java type into the requested type.

      As an example, if this is a JavaType<Integer> and we are asked to unwrap the Integer value as a Long, we would return something like Long.valueOf( value.longValue() ).

      Intended use is during PreparedStatement binding.

      Type Parameters:
      X - The conversion type.
      Parameters:
      value - The value to unwrap
      type - The type as which to unwrap
      options - The options
      Returns:
      The unwrapped value.
    • wrap

      <X> T wrap(X value, WrapperOptions options)
      Wrap a value as our handled Java type.

      Intended use is during ResultSet extraction.

      Type Parameters:
      X - The conversion type.
      Parameters:
      value - The value to wrap.
      options - The options
      Returns:
      The wrapped value.
    • isWider

      default boolean isWider(JavaType<?> javaType)
      Determines if this Java type is wider than the given Java type, that is, if the given type can be safely widened to this type.
    • coerce

      default <X> T coerce(X value, JavaType.CoercionContext coercionContext)
    • createJavaType

      @Incubating default JavaType<T> createJavaType(ParameterizedType parameterizedType, TypeConfiguration typeConfiguration)
      Creates the JavaType for the given ParameterizedType based on this JavaType registered for the raw type.
      Since:
      6.1
    • isTemporalType

      default boolean isTemporalType()
      Return true if the implementation is an instance of TemporalJavaType
      Returns:
      true if it is an instance of TemporalJavaType; false otherwise
    • getCheckCondition

      @Incubating default String getCheckCondition(String columnName, JdbcType jdbcType, BasicValueConverter<T,?> converter, Dialect dialect)
      The check constraint that should be added to the column definition in generated DDL.
      Parameters:
      columnName - the name of the column
      jdbcType - the JdbcType 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