Skip to content

Commit

Permalink
Create a TypeContributor that registers all supported types #166
Browse files Browse the repository at this point in the history
  • Loading branch information
vladmihalcea committed Apr 6, 2022
1 parent 059fd07 commit a5130b4
Show file tree
Hide file tree
Showing 6 changed files with 255 additions and 0 deletions.
@@ -0,0 +1,72 @@
package com.vladmihalcea.hibernate.type;

import com.vladmihalcea.hibernate.type.array.*;
import com.vladmihalcea.hibernate.type.basic.NullableCharacterType;
import com.vladmihalcea.hibernate.type.basic.PostgreSQLEnumType;
import com.vladmihalcea.hibernate.type.basic.PostgreSQLHStoreType;
import com.vladmihalcea.hibernate.type.basic.PostgreSQLInetType;
import com.vladmihalcea.hibernate.type.json.*;
import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType;
import com.vladmihalcea.hibernate.type.range.guava.PostgreSQLGuavaRangeType;
import org.hibernate.boot.model.TypeContributions;
import org.hibernate.boot.model.TypeContributor;
import org.hibernate.dialect.*;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.service.ServiceRegistry;

/**
* The {@link HibernateTypesContributor} registers various types automatically.
*
* @author Vlad Mihalcea
* @since 2.15.0
*/
public class HibernateTypesContributor implements TypeContributor {

@Override
public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class);
Dialect dialect = jdbcServices.getDialect();

if(dialect instanceof PostgreSQLDialect) {
/* Arrays */
typeContributions.contributeType(BooleanArrayType.INSTANCE);
typeContributions.contributeType(DateArrayType.INSTANCE);
typeContributions.contributeType(DecimalArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(EnumArrayType.INSTANCE);
typeContributions.contributeType(IntArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(ListArrayType.INSTANCE);
typeContributions.contributeType(LongArrayType.INSTANCE);
typeContributions.contributeType(StringArrayType.INSTANCE);
typeContributions.contributeType(TimestampArrayType.INSTANCE);
typeContributions.contributeType(UUIDArrayType.INSTANCE);

/* JSON */
typeContributions.contributeType(JsonBinaryType.INSTANCE);

/* Specific-types */
typeContributions.contributeType(PostgreSQLEnumType.INSTANCE);
typeContributions.contributeType(PostgreSQLHStoreType.INSTANCE);
typeContributions.contributeType(PostgreSQLInetType.INSTANCE);
typeContributions.contributeType(PostgreSQLRangeType.INSTANCE);
typeContributions.contributeType(PostgreSQLGuavaRangeType.INSTANCE);
} else if(dialect instanceof MySQLDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonNodeStringType.INSTANCE);
} else if(dialect instanceof SQLServerDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
} else if(dialect instanceof OracleDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonBlobType.INSTANCE);
}

/* Basic */
typeContributions.contributeType(NullableCharacterType.INSTANCE);
/* JSON */
typeContributions.contributeType(JsonType.INSTANCE);
}
}
@@ -0,0 +1 @@
com.vladmihalcea.hibernate.type.HibernateTypesContributor
@@ -0,0 +1,90 @@
package com.vladmihalcea.hibernate.type;

import com.vladmihalcea.hibernate.type.array.*;
import com.vladmihalcea.hibernate.type.basic.*;
import com.vladmihalcea.hibernate.type.interval.OracleIntervalDayToSecondType;
import com.vladmihalcea.hibernate.type.interval.PostgreSQLIntervalType;
import com.vladmihalcea.hibernate.type.interval.PostgreSQLPeriodType;
import com.vladmihalcea.hibernate.type.json.*;
import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType;
import com.vladmihalcea.hibernate.type.range.guava.PostgreSQLGuavaRangeType;
import com.vladmihalcea.hibernate.type.search.PostgreSQLTSVectorType;
import org.hibernate.boot.model.TypeContributions;
import org.hibernate.boot.model.TypeContributor;
import org.hibernate.dialect.*;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.service.ServiceRegistry;

/**
* The {@link HibernateTypesContributor} registers various types automatically.
*
* @author Vlad Mihalcea
* @since 2.15.0
*/
public class HibernateTypesContributor implements TypeContributor {

@Override
public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class);
Dialect dialect = jdbcServices.getDialect();

if(dialect instanceof PostgreSQLDialect) {
/* Arrays */
typeContributions.contributeType(BooleanArrayType.INSTANCE);
typeContributions.contributeType(DateArrayType.INSTANCE);
typeContributions.contributeType(DecimalArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(EnumArrayType.INSTANCE);
typeContributions.contributeType(IntArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(ListArrayType.INSTANCE);
typeContributions.contributeType(LocalDateArrayType.INSTANCE);
typeContributions.contributeType(LocalDateTimeArrayType.INSTANCE);
typeContributions.contributeType(LongArrayType.INSTANCE);
typeContributions.contributeType(StringArrayType.INSTANCE);
typeContributions.contributeType(TimestampArrayType.INSTANCE);
typeContributions.contributeType(UUIDArrayType.INSTANCE);

/* Date/Time */
typeContributions.contributeType(PostgreSQLIntervalType.INSTANCE);
typeContributions.contributeType(PostgreSQLPeriodType.INSTANCE);

/* JSON */
typeContributions.contributeType(JsonBinaryType.INSTANCE);

/* Specific-types */
typeContributions.contributeType(PostgreSQLTSVectorType.INSTANCE);
typeContributions.contributeType(PostgreSQLEnumType.INSTANCE);
typeContributions.contributeType(PostgreSQLHStoreType.INSTANCE);
typeContributions.contributeType(PostgreSQLInetType.INSTANCE);
typeContributions.contributeType(PostgreSQLRangeType.INSTANCE);
typeContributions.contributeType(PostgreSQLGuavaRangeType.INSTANCE);
} else if(dialect instanceof MySQLDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonNodeStringType.INSTANCE);
} else if(dialect instanceof SQLServerDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
} else if(dialect instanceof OracleDialect) {
/* Date/Time */
typeContributions.contributeType(OracleIntervalDayToSecondType.INSTANCE);
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonBlobType.INSTANCE);
}

/* Basic */
typeContributions.contributeType(NullableCharacterType.INSTANCE);
/* Date/Time */
typeContributions.contributeType(Iso8601MonthType.INSTANCE);
typeContributions.contributeType(MonthDayDateType.INSTANCE);
typeContributions.contributeType(MonthDayIntegerType.INSTANCE);
typeContributions.contributeType(YearMonthDateType.INSTANCE);
typeContributions.contributeType(YearMonthEpochType.INSTANCE);
typeContributions.contributeType(YearMonthIntegerType.INSTANCE);
typeContributions.contributeType(YearMonthTimestampType.INSTANCE);
/* JSON */
typeContributions.contributeType(JsonType.INSTANCE);
}
}
@@ -0,0 +1 @@
com.vladmihalcea.hibernate.type.HibernateTypesContributor
@@ -0,0 +1,90 @@
package com.vladmihalcea.hibernate.type;

import com.vladmihalcea.hibernate.type.array.*;
import com.vladmihalcea.hibernate.type.basic.*;
import com.vladmihalcea.hibernate.type.interval.OracleIntervalDayToSecondType;
import com.vladmihalcea.hibernate.type.interval.PostgreSQLIntervalType;
import com.vladmihalcea.hibernate.type.interval.PostgreSQLPeriodType;
import com.vladmihalcea.hibernate.type.json.*;
import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType;
import com.vladmihalcea.hibernate.type.range.guava.PostgreSQLGuavaRangeType;
import com.vladmihalcea.hibernate.type.search.PostgreSQLTSVectorType;
import org.hibernate.boot.model.TypeContributions;
import org.hibernate.boot.model.TypeContributor;
import org.hibernate.dialect.*;
import org.hibernate.engine.jdbc.spi.JdbcServices;
import org.hibernate.service.ServiceRegistry;

/**
* The {@link HibernateTypesContributor} registers various types automatically.
*
* @author Vlad Mihalcea
* @since 2.15.0
*/
public class HibernateTypesContributor implements TypeContributor {

@Override
public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
JdbcServices jdbcServices = serviceRegistry.getService(JdbcServices.class);
Dialect dialect = jdbcServices.getDialect();

if(dialect instanceof PostgreSQLDialect) {
/* Arrays */
typeContributions.contributeType(BooleanArrayType.INSTANCE);
typeContributions.contributeType(DateArrayType.INSTANCE);
typeContributions.contributeType(DecimalArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(EnumArrayType.INSTANCE);
typeContributions.contributeType(IntArrayType.INSTANCE);
typeContributions.contributeType(DoubleArrayType.INSTANCE);
typeContributions.contributeType(ListArrayType.INSTANCE);
typeContributions.contributeType(LocalDateArrayType.INSTANCE);
typeContributions.contributeType(LocalDateTimeArrayType.INSTANCE);
typeContributions.contributeType(LongArrayType.INSTANCE);
typeContributions.contributeType(StringArrayType.INSTANCE);
typeContributions.contributeType(TimestampArrayType.INSTANCE);
typeContributions.contributeType(UUIDArrayType.INSTANCE);

/* Date/Time */
typeContributions.contributeType(PostgreSQLIntervalType.INSTANCE);
typeContributions.contributeType(PostgreSQLPeriodType.INSTANCE);

/* JSON */
typeContributions.contributeType(JsonBinaryType.INSTANCE);

/* Specific-types */
typeContributions.contributeType(PostgreSQLTSVectorType.INSTANCE);
typeContributions.contributeType(PostgreSQLEnumType.INSTANCE);
typeContributions.contributeType(PostgreSQLHStoreType.INSTANCE);
typeContributions.contributeType(PostgreSQLInetType.INSTANCE);
typeContributions.contributeType(PostgreSQLRangeType.INSTANCE);
typeContributions.contributeType(PostgreSQLGuavaRangeType.INSTANCE);
} else if(dialect instanceof MySQLDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonNodeStringType.INSTANCE);
} else if(dialect instanceof SQLServerDialect) {
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
} else if(dialect instanceof OracleDialect) {
/* Date/Time */
typeContributions.contributeType(OracleIntervalDayToSecondType.INSTANCE);
/* JSON */
typeContributions.contributeType(JsonStringType.INSTANCE);
typeContributions.contributeType(JsonBlobType.INSTANCE);
}

/* Basic */
typeContributions.contributeType(NullableCharacterType.INSTANCE);
/* Date/Time */
typeContributions.contributeType(Iso8601MonthType.INSTANCE);
typeContributions.contributeType(MonthDayDateType.INSTANCE);
typeContributions.contributeType(MonthDayIntegerType.INSTANCE);
typeContributions.contributeType(YearMonthDateType.INSTANCE);
typeContributions.contributeType(YearMonthEpochType.INSTANCE);
typeContributions.contributeType(YearMonthIntegerType.INSTANCE);
typeContributions.contributeType(YearMonthTimestampType.INSTANCE);
/* JSON */
typeContributions.contributeType(JsonType.INSTANCE);
}
}
@@ -0,0 +1 @@
com.vladmihalcea.hibernate.type.HibernateTypesContributor

0 comments on commit a5130b4

Please sign in to comment.