diff --git a/hibernate-types-4/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java b/hibernate-types-4/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java index 9e7645c36..c0bc60447 100644 --- a/hibernate-types-4/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java +++ b/hibernate-types-4/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java @@ -10,6 +10,7 @@ import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.util.collections.ArrayHelper; import org.hibernate.metamodel.relational.Size; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; @@ -31,7 +32,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableType implements UserType, Type { +public abstract class ImmutableType implements UserType, BasicType { private final Configuration configuration; @@ -338,4 +339,11 @@ public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException { Method valueOfMethod = ReflectionUtils.getMethodOrNull(clazz, "valueOf", String.class); return valueOfMethod != null ? ReflectionUtils.invokeStaticMethod(valueOfMethod, xml.getText()) : null; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-43/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java b/hibernate-types-43/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java index 41124a1aa..5fc816606 100644 --- a/hibernate-types-43/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java +++ b/hibernate-types-43/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java @@ -10,6 +10,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; @@ -31,7 +32,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableType implements UserType, Type { +public abstract class ImmutableType implements UserType, BasicType { private final Configuration configuration; @@ -338,4 +339,11 @@ public Object fromXMLNode(Node xml, Mapping factory) throws HibernateException { Method valueOfMethod = ReflectionUtils.getMethodOrNull(clazz, "valueOf", String.class); return valueOfMethod != null ? ReflectionUtils.invokeStaticMethod(valueOfMethod, xml.getText()) : null; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java b/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java index ccceeb2b9..466e16bc5 100644 --- a/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java +++ b/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java @@ -12,6 +12,7 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.service.ServiceRegistry; import org.hibernate.type.BasicType; +import org.hibernate.usertype.CompositeUserType; import org.hibernate.usertype.UserType; /** @@ -77,17 +78,17 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv .contributeType(typeContributions, JsonType.INSTANCE); } - private HibernateTypesContributor contributeType(TypeContributions typeContributions, BasicType type) { - typeContributions.contributeType(type); - return this; - } - - private HibernateTypesContributor contributeType(TypeContributions typeContributions, UserType type) { - if(type instanceof ImmutableType) { - ImmutableType immutableType = (ImmutableType) type; - typeContributions.contributeType(immutableType, immutableType.getName()); + private HibernateTypesContributor contributeType(TypeContributions typeContributions, Object type) { + if (type instanceof BasicType) { + typeContributions.contributeType((BasicType) type); + } else if (type instanceof UserType) { + typeContributions.contributeType((UserType) type, type.getClass().getSimpleName()); + } else if (type instanceof CompositeUserType) { + typeContributions.contributeType((CompositeUserType) type, type.getClass().getSimpleName()); } else { - typeContributions.contributeType(type, type.getClass().getSimpleName()); + throw new UnsupportedOperationException( + String.format("The [%s] is not supported!", type.getClass()) + ); } return this; } diff --git a/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java b/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java index 1bc5cf4a0..c129963bc 100644 --- a/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java +++ b/hibernate-types-5/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java @@ -8,6 +8,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; @@ -28,7 +29,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableType implements UserType, Type { +public abstract class ImmutableType implements UserType, BasicType { private final Configuration configuration; @@ -319,4 +320,11 @@ public Object replace(Object original, Object target, SessionImplementor session public boolean[] toColumnNullness(Object value, Mapping mapping) { return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-52/pom.xml b/hibernate-types-52/pom.xml index 93bb71cf6..61685b5a8 100644 --- a/hibernate-types-52/pom.xml +++ b/hibernate-types-52/pom.xml @@ -142,6 +142,15 @@ true + + + + org.hibernate + hibernate-envers + ${hibernate.version} + test + + org.springframework spring-test diff --git a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java index 6d99cf7ab..fc645a65e 100644 --- a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java +++ b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java @@ -6,6 +6,7 @@ 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.money.MonetaryAmountType; import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType; import com.vladmihalcea.hibernate.type.range.guava.PostgreSQLGuavaRangeType; import com.vladmihalcea.hibernate.type.search.PostgreSQLTSVectorType; @@ -16,6 +17,7 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.service.ServiceRegistry; import org.hibernate.type.BasicType; +import org.hibernate.usertype.CompositeUserType; import org.hibernate.usertype.UserType; /** @@ -92,21 +94,22 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv .contributeType(typeContributions, YearMonthEpochType.INSTANCE) .contributeType(typeContributions, YearMonthIntegerType.INSTANCE) .contributeType(typeContributions, YearMonthTimestampType.INSTANCE) + .contributeType(typeContributions, MonetaryAmountType.INSTANCE) /* JSON */ .contributeType(typeContributions, JsonType.INSTANCE); } - private HibernateTypesContributor contributeType(TypeContributions typeContributions, BasicType type) { - typeContributions.contributeType(type); - return this; - } - - private HibernateTypesContributor contributeType(TypeContributions typeContributions, UserType type) { - if(type instanceof ImmutableType) { - ImmutableType immutableType = (ImmutableType) type; - typeContributions.contributeType(immutableType, immutableType.getName()); + private HibernateTypesContributor contributeType(TypeContributions typeContributions, Object type) { + if (type instanceof BasicType) { + typeContributions.contributeType((BasicType) type); + } else if (type instanceof UserType) { + typeContributions.contributeType((UserType) type, type.getClass().getSimpleName()); + } else if (type instanceof CompositeUserType) { + typeContributions.contributeType((CompositeUserType) type, type.getClass().getSimpleName()); } else { - typeContributions.contributeType(type, type.getClass().getSimpleName()); + throw new UnsupportedOperationException( + String.format("The [%s] is not supported!", type.getClass()) + ); } return this; } diff --git a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java index 8d3ddab99..75ca77cd1 100644 --- a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java +++ b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java @@ -8,6 +8,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; @@ -32,7 +33,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableCompositeType implements CompositeUserType, Type { +public abstract class ImmutableCompositeType implements CompositeUserType, BasicType { private final Configuration configuration; @@ -325,4 +326,11 @@ public Object replace(Object original, Object target, SharedSessionContractImple public boolean[] toColumnNullness(Object value, Mapping mapping) { return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java index 0dc11aae9..d9c3b06c5 100644 --- a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java +++ b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java @@ -8,6 +8,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; @@ -28,7 +29,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableType implements UserType, Type { +public abstract class ImmutableType implements UserType, BasicType { private final Configuration configuration; @@ -319,4 +320,11 @@ public Object replace(Object original, Object target, SharedSessionContractImple public boolean[] toColumnNullness(Object value, Mapping mapping) { return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java index 86b72525b..e350ae8e0 100644 --- a/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java +++ b/hibernate-types-52/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java @@ -30,6 +30,8 @@ */ public class MonetaryAmountType extends ImmutableCompositeType { + public static final MonetaryAmountType INSTANCE = new MonetaryAmountType(); + public MonetaryAmountType() { super(MonetaryAmount.class); } diff --git a/hibernate-types-52/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java b/hibernate-types-52/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java index 9d5a83f15..b4d5fe9b3 100644 --- a/hibernate-types-52/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java +++ b/hibernate-types-52/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.NaturalId; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; +import org.hibernate.envers.Audited; import org.junit.Test; import javax.persistence.*; @@ -67,6 +68,7 @@ public void test() { }); } + @Audited @Entity(name = "Book") @Table(name = "book") @TypeDef(name = "hstore", typeClass = PostgreSQLHStoreType.class) diff --git a/hibernate-types-55/pom.xml b/hibernate-types-55/pom.xml index a88ce0b3e..4ea21dee5 100644 --- a/hibernate-types-55/pom.xml +++ b/hibernate-types-55/pom.xml @@ -142,6 +142,15 @@ true + + + + org.hibernate + hibernate-envers + ${hibernate.version} + test + + org.springframework spring-test @@ -155,7 +164,7 @@ 8 - 5.6.9.Final + 5.6.10.Final 42.3.3 8.0.28 diff --git a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java index 6d99cf7ab..fc645a65e 100644 --- a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java +++ b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/HibernateTypesContributor.java @@ -6,6 +6,7 @@ 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.money.MonetaryAmountType; import com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType; import com.vladmihalcea.hibernate.type.range.guava.PostgreSQLGuavaRangeType; import com.vladmihalcea.hibernate.type.search.PostgreSQLTSVectorType; @@ -16,6 +17,7 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.service.ServiceRegistry; import org.hibernate.type.BasicType; +import org.hibernate.usertype.CompositeUserType; import org.hibernate.usertype.UserType; /** @@ -92,21 +94,22 @@ public void contribute(TypeContributions typeContributions, ServiceRegistry serv .contributeType(typeContributions, YearMonthEpochType.INSTANCE) .contributeType(typeContributions, YearMonthIntegerType.INSTANCE) .contributeType(typeContributions, YearMonthTimestampType.INSTANCE) + .contributeType(typeContributions, MonetaryAmountType.INSTANCE) /* JSON */ .contributeType(typeContributions, JsonType.INSTANCE); } - private HibernateTypesContributor contributeType(TypeContributions typeContributions, BasicType type) { - typeContributions.contributeType(type); - return this; - } - - private HibernateTypesContributor contributeType(TypeContributions typeContributions, UserType type) { - if(type instanceof ImmutableType) { - ImmutableType immutableType = (ImmutableType) type; - typeContributions.contributeType(immutableType, immutableType.getName()); + private HibernateTypesContributor contributeType(TypeContributions typeContributions, Object type) { + if (type instanceof BasicType) { + typeContributions.contributeType((BasicType) type); + } else if (type instanceof UserType) { + typeContributions.contributeType((UserType) type, type.getClass().getSimpleName()); + } else if (type instanceof CompositeUserType) { + typeContributions.contributeType((CompositeUserType) type, type.getClass().getSimpleName()); } else { - typeContributions.contributeType(type, type.getClass().getSimpleName()); + throw new UnsupportedOperationException( + String.format("The [%s] is not supported!", type.getClass()) + ); } return this; } diff --git a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java index a2f20c1d6..75ca77cd1 100644 --- a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java +++ b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableCompositeType.java @@ -8,11 +8,11 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; import org.hibernate.usertype.CompositeUserType; -import org.hibernate.usertype.UserType; import java.io.Serializable; import java.sql.PreparedStatement; @@ -33,7 +33,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableCompositeType implements CompositeUserType, Type { +public abstract class ImmutableCompositeType implements CompositeUserType, BasicType { private final Configuration configuration; @@ -326,4 +326,11 @@ public Object replace(Object original, Object target, SharedSessionContractImple public boolean[] toColumnNullness(Object value, Mapping mapping) { return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java index 50350ee4c..d9c3b06c5 100644 --- a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java +++ b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/ImmutableType.java @@ -8,10 +8,10 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.type.BasicType; import org.hibernate.type.ForeignKeyDirection; import org.hibernate.type.Type; import org.hibernate.type.descriptor.java.IncomparableComparator; -import org.hibernate.type.spi.TypeBootstrapContext; import org.hibernate.usertype.UserType; import java.io.Serializable; @@ -29,7 +29,7 @@ * * @author Vlad Mihalcea */ -public abstract class ImmutableType implements UserType, Type { +public abstract class ImmutableType implements UserType, BasicType { private final Configuration configuration; @@ -320,4 +320,11 @@ public Object replace(Object original, Object target, SharedSessionContractImple public boolean[] toColumnNullness(Object value, Mapping mapping) { return value == null ? ArrayHelper.FALSE : ArrayHelper.TRUE; } + + @Override + public String[] getRegistrationKeys() { + return new String[]{ + getName() + }; + } } \ No newline at end of file diff --git a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java index 86b72525b..e350ae8e0 100644 --- a/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java +++ b/hibernate-types-55/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java @@ -30,6 +30,8 @@ */ public class MonetaryAmountType extends ImmutableCompositeType { + public static final MonetaryAmountType INSTANCE = new MonetaryAmountType(); + public MonetaryAmountType() { super(MonetaryAmount.class); } diff --git a/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java b/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java index 9d5a83f15..b4d5fe9b3 100644 --- a/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java +++ b/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/basic/PostgreSQLHStoreTypeTest.java @@ -5,6 +5,7 @@ import org.hibernate.annotations.NaturalId; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; +import org.hibernate.envers.Audited; import org.junit.Test; import javax.persistence.*; @@ -67,6 +68,7 @@ public void test() { }); } + @Audited @Entity(name = "Book") @Table(name = "book") @TypeDef(name = "hstore", typeClass = PostgreSQLHStoreType.class) diff --git a/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/money/MySQLMonetaryAmountTypeTest.java b/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/money/MySQLMonetaryAmountTypeTest.java index c6ea0cd2b..b9f0a18d1 100644 --- a/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/money/MySQLMonetaryAmountTypeTest.java +++ b/hibernate-types-55/src/test/java/com/vladmihalcea/hibernate/type/money/MySQLMonetaryAmountTypeTest.java @@ -4,6 +4,7 @@ import org.hibernate.annotations.Columns; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; +import org.hibernate.envers.Audited; import org.javamoney.moneta.Money; import org.junit.Test; @@ -90,6 +91,7 @@ public void testReturnNullMoney() { }); } + @Audited @Entity(name = "Salary") @Table(name = "salary") @TypeDef(name = "monetary-amount-currency", typeClass = MonetaryAmountType.class, defaultForType = MonetaryAmount.class) diff --git a/hibernate-types-60/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java b/hibernate-types-60/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java index 1dcdd2a1b..ecd8e28c8 100644 --- a/hibernate-types-60/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java +++ b/hibernate-types-60/src/main/java/com/vladmihalcea/hibernate/type/money/MonetaryAmountType.java @@ -21,7 +21,8 @@ * * @author Piotr Olaszewski */ -public class MonetaryAmountType implements CompositeUserType { +public class MonetaryAmountType implements CompositeUserType +{ public static class MonetaryAmountMapper { BigDecimal amount; String currency;