diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java index 66d36064cdcc..d712767fc707 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java @@ -6,6 +6,7 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; +import java.sql.Types; import org.hibernate.boot.model.FunctionContributions; import org.hibernate.boot.model.TypeContributions; @@ -313,4 +314,11 @@ public IdentifierHelper buildIdentifierHelper(IdentifierHelperBuilder builder, D public String getDual() { return "dual"; } + + @Override + public boolean equivalentTypes(int typeCode1, int typeCode2) { + return typeCode1 == Types.LONGVARCHAR && typeCode2 == SqlTypes.JSON + || typeCode1 == SqlTypes.JSON && typeCode2 == Types.LONGVARCHAR + || super.equivalentTypes( typeCode1, typeCode2 ); + } } diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/schemavalidation/MariaDbJsonColumnValidationTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/schemavalidation/MariaDbJsonColumnValidationTest.java new file mode 100644 index 000000000000..aedfb618b470 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/schemavalidation/MariaDbJsonColumnValidationTest.java @@ -0,0 +1,62 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.schemavalidation; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import org.hibernate.dialect.MariaDBDialect; +import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.tool.hbm2ddl.SchemaValidator; +import org.junit.Before; +import org.junit.Test; + +import java.math.BigDecimal; + +@JiraKey(value = "HHH-18869") +@RequiresDialect(value = MariaDBDialect.class) +public class MariaDbJsonColumnValidationTest extends BaseNonConfigCoreFunctionalTestCase { + @Override + protected Class[] getAnnotatedClasses() { + return new Class[] {Foo.class}; + } + + @Before + public void init() { + try { + inTransaction( session -> { + try { + session.createNativeMutationQuery( "drop table Foo" ).executeUpdate(); + } + catch (Exception e) { + throw new RuntimeException( e ); + } + } + ); + inTransaction( session -> + session.createNativeMutationQuery( + "create table Foo (id integer not null, bigDecimals json, primary key (id)) engine=InnoDB" + ).executeUpdate() + ); + } + catch (Exception ignored) { + } + } + + @Test + public void testSchemaValidation() { + new SchemaValidator().validate( metadata() ); + } + + @Entity(name = "Foo") + @Table(name = "Foo") + public static class Foo { + @Id + public Integer id; + public BigDecimal[] bigDecimals; + } +}