HHH-14925 Remove deprecated BasicType implementations

This commit is contained in:
Karel Maesen 2021-11-11 16:03:22 +01:00
parent f4909b7046
commit 0300e54fef
18 changed files with 192 additions and 184 deletions

View File

@ -202,10 +202,7 @@ create transform for db2gse.st_geometry db2_program (
Hibernate Spatial comes with the following types: Hibernate Spatial comes with the following types:
jts_geometry:: TODO
Handled by `org.hibernate.spatial.JTSGeometryType`, it maps a database geometry column type to a `org.locationtech.jts.geom.Geometry` entity property type.
geolatte_geometry::
Handled by `org.hibernate.spatial.GeolatteGeometryType`, it maps a database geometry column type to an `org.geolatte.geom.Geometry` entity property type.
It suffices to declare a property as either a JTS or a Geolatte-geom `Geometry` and Hibernate Spatial will map it using the It suffices to declare a property as either a JTS or a Geolatte-geom `Geometry` and Hibernate Spatial will map it using the
relevant type. relevant type.

View File

@ -14,6 +14,13 @@ import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.JdbcTypeDescriptorIndicators; import org.hibernate.type.descriptor.jdbc.JdbcTypeDescriptorIndicators;
import org.geolatte.geom.Geometry; import org.geolatte.geom.Geometry;
import org.geolatte.geom.GeometryCollection;
import org.geolatte.geom.LineString;
import org.geolatte.geom.MultiLineString;
import org.geolatte.geom.MultiPoint;
import org.geolatte.geom.MultiPolygon;
import org.geolatte.geom.Point;
import org.geolatte.geom.Polygon;
import org.geolatte.geom.codec.Wkt; import org.geolatte.geom.codec.Wkt;
import org.geolatte.geom.jts.JTS; import org.geolatte.geom.jts.JTS;
@ -29,17 +36,33 @@ public class GeolatteGeometryJavaTypeDescriptor extends AbstractJavaTypeDescript
/** /**
* an instance of this descriptor * an instance of this descriptor
*/ */
public static final GeolatteGeometryJavaTypeDescriptor INSTANCE = new GeolatteGeometryJavaTypeDescriptor(); public static final GeolatteGeometryJavaTypeDescriptor GEOMETRY_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
Geometry.class );
public static final GeolatteGeometryJavaTypeDescriptor POINT_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
Point.class );
public static final GeolatteGeometryJavaTypeDescriptor LINESTRING_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
LineString.class );
public static final GeolatteGeometryJavaTypeDescriptor POLYGON_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
Polygon.class );
public static final GeolatteGeometryJavaTypeDescriptor GEOMETRYCOLL_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
GeometryCollection.class );
public static final GeolatteGeometryJavaTypeDescriptor MULTIPOINT_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
MultiPoint.class );
public static final GeolatteGeometryJavaTypeDescriptor MULTILINESTRING_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
MultiLineString.class );
public static final GeolatteGeometryJavaTypeDescriptor MULTIPOLYGON_INSTANCE = new GeolatteGeometryJavaTypeDescriptor(
MultiPolygon.class );
/** /**
* Initialize a type descriptor for the geolatte-geom {@code Geometry} type. * Initialize a type descriptor for the geolatte-geom {@code Geometry} type.
*/ */
public GeolatteGeometryJavaTypeDescriptor() { public GeolatteGeometryJavaTypeDescriptor(Class<? extends Geometry> type) {
this( Wkt.Dialect.SFA_1_1_0 ); this( type, Wkt.Dialect.SFA_1_1_0 );
} }
public GeolatteGeometryJavaTypeDescriptor(Wkt.Dialect wktDialect) { public GeolatteGeometryJavaTypeDescriptor(Class<? extends Geometry> type, Wkt.Dialect wktDialect) {
super( Geometry.class ); super( type );
this.wktDialect = Wkt.Dialect.SFA_1_1_0; this.wktDialect = Wkt.Dialect.SFA_1_1_0;
} }
@ -49,7 +72,6 @@ public class GeolatteGeometryJavaTypeDescriptor extends AbstractJavaTypeDescript
} }
@Override @Override
public Geometry fromString(CharSequence string) { public Geometry fromString(CharSequence string) {
return Wkt.fromWkt( string.toString(), wktDialect ); return Wkt.fromWkt( string.toString(), wktDialect );

View File

@ -1,60 +0,0 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.spatial;
import org.hibernate.type.AbstractSingleColumnStandardBasicType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.geolatte.geom.Geometry;
import org.geolatte.geom.GeometryCollection;
import org.geolatte.geom.LineString;
import org.geolatte.geom.MultiLineString;
import org.geolatte.geom.MultiPoint;
import org.geolatte.geom.MultiPolygon;
import org.geolatte.geom.Point;
import org.geolatte.geom.Polygon;
/**
* a {@code Type} that maps between the database geometry type and geolatte-geom {@code Geometry}.
*
* @author Karel Maesen, Geovise BVBA
* creation-date: 10/12/12
*/
public class GeolatteGeometryType extends AbstractSingleColumnStandardBasicType<Geometry> implements Spatial {
public static final String[] REG_KEYS = {
Geometry.class.getCanonicalName(),
Point.class.getCanonicalName(),
Polygon.class.getCanonicalName(),
MultiPolygon.class.getCanonicalName(),
LineString.class.getCanonicalName(),
MultiLineString.class.getCanonicalName(),
MultiPoint.class.getCanonicalName(),
GeometryCollection.class.getCanonicalName(),
"geolatte_geometry"
};
/**
* Constructs an instance with the specified {@code SqlTypeDescriptor}
*
* @param sqlTypeDescriptor The Descriptor for the type used by the database for geometries.
*/
public GeolatteGeometryType(JdbcType sqlTypeDescriptor) {
super( sqlTypeDescriptor, GeolatteGeometryJavaTypeDescriptor.INSTANCE );
}
@Override
public String[] getRegistrationKeys() {
return REG_KEYS;
}
@Override
public String getName() {
return "geolatte_geometry";
}
}

View File

@ -12,15 +12,21 @@ import java.util.Locale;
import org.hibernate.type.SqlTypes; import org.hibernate.type.SqlTypes;
import org.hibernate.type.descriptor.WrapperOptions; import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.AbstractJavaTypeDescriptor; import org.hibernate.type.descriptor.java.AbstractJavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.descriptor.jdbc.JdbcType; import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.JdbcTypeDescriptorIndicators; import org.hibernate.type.descriptor.jdbc.JdbcTypeDescriptorIndicators;
import org.geolatte.geom.jts.JTS;
import org.geolatte.geom.jts.JTSUtils; import org.geolatte.geom.jts.JTSUtils;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryCollection;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.MultiLineString;
import org.locationtech.jts.geom.MultiPoint;
import org.locationtech.jts.geom.MultiPolygon;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException; import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader; import org.locationtech.jts.io.WKTReader;
import org.geolatte.geom.jts.JTS;
/** /**
* Descriptor for JTS {@code Geometry}s. * Descriptor for JTS {@code Geometry}s.
@ -33,13 +39,28 @@ public class JTSGeometryJavaTypeDescriptor extends AbstractJavaTypeDescriptor<Ge
/** /**
* An instance of this descriptor * An instance of this descriptor
*/ */
public static final JavaType<Geometry> INSTANCE = new JTSGeometryJavaTypeDescriptor(); public static final JTSGeometryJavaTypeDescriptor GEOMETRY_INSTANCE = new JTSGeometryJavaTypeDescriptor(
Geometry.class );
public static final JTSGeometryJavaTypeDescriptor POINT_INSTANCE = new JTSGeometryJavaTypeDescriptor(
Point.class );
public static final JTSGeometryJavaTypeDescriptor LINESTRING_INSTANCE = new JTSGeometryJavaTypeDescriptor(
LineString.class );
public static final JTSGeometryJavaTypeDescriptor POLYGON_INSTANCE = new JTSGeometryJavaTypeDescriptor(
Polygon.class );
public static final JTSGeometryJavaTypeDescriptor GEOMETRYCOLL_INSTANCE = new JTSGeometryJavaTypeDescriptor(
GeometryCollection.class );
public static final JTSGeometryJavaTypeDescriptor MULTIPOINT_INSTANCE = new JTSGeometryJavaTypeDescriptor(
MultiPoint.class );
public static final JTSGeometryJavaTypeDescriptor MULTILINESTRING_INSTANCE = new JTSGeometryJavaTypeDescriptor(
MultiLineString.class );
public static final JTSGeometryJavaTypeDescriptor MULTIPOLYGON_INSTANCE = new JTSGeometryJavaTypeDescriptor(
MultiPolygon.class );
/** /**
* Initialize a type descriptor for the geolatte-geom {@code Geometry} type. * Initialize a type descriptor for the geolatte-geom {@code Geometry} type.
*/ */
public JTSGeometryJavaTypeDescriptor() { public JTSGeometryJavaTypeDescriptor(Class<? extends Geometry> type) {
super( Geometry.class ); super( type );
} }
@Override @Override
@ -68,6 +89,7 @@ public class JTSGeometryJavaTypeDescriptor extends AbstractJavaTypeDescriptor<Ge
return JTSUtils.equalsExact3D( one, another ); return JTSUtils.equalsExact3D( one, another );
} }
@SuppressWarnings("unchecked")
@Override @Override
public <X> X unwrap(Geometry value, Class<X> type, WrapperOptions options) { public <X> X unwrap(Geometry value, Class<X> type, WrapperOptions options) {
if ( value == null ) { if ( value == null ) {
@ -90,13 +112,13 @@ public class JTSGeometryJavaTypeDescriptor extends AbstractJavaTypeDescriptor<Ge
if ( value == null ) { if ( value == null ) {
return null; return null;
} }
if ( Geometry.class.isInstance( value ) ) { if ( value instanceof Geometry ) {
return (Geometry) value; return (Geometry) value;
} }
if ( org.geolatte.geom.Geometry.class.isInstance( value ) ) { if ( value instanceof org.geolatte.geom.Geometry ) {
return JTS.to( (org.geolatte.geom.Geometry) value ); return JTS.to( (org.geolatte.geom.Geometry<?>) value );
} }
if ( CharSequence.class.isInstance( value ) ) { if ( value instanceof CharSequence ) {
return fromString( (CharSequence) value ); return fromString( (CharSequence) value );
} }
throw unknownWrap( value.getClass() ); throw unknownWrap( value.getClass() );

View File

@ -1,52 +0,0 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.spatial;
import org.hibernate.type.AbstractSingleColumnStandardBasicType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.locationtech.jts.geom.Geometry;
/**
* A {@code Type} that maps between the database geometry type and JTS {@code Geometry}.
*
* @author Karel Maesen
*/
public class JTSGeometryType extends AbstractSingleColumnStandardBasicType<Geometry> implements Spatial {
/**
* Constructs an instance with the specified {@code SqlTypeDescriptor}
*
* @param jdbcType The descriptor for the type used by the database for geometries.
*/
public JTSGeometryType(JdbcType jdbcType) {
super( jdbcType, JTSGeometryJavaTypeDescriptor.INSTANCE );
}
@Override
public String[] getRegistrationKeys() {
return new String[] {
Geometry.class.getCanonicalName(),
org.locationtech.jts.geom.Point.class.getCanonicalName(),
org.locationtech.jts.geom.Polygon.class.getCanonicalName(),
org.locationtech.jts.geom.MultiPolygon.class.getCanonicalName(),
org.locationtech.jts.geom.LineString.class.getCanonicalName(),
org.locationtech.jts.geom.MultiLineString.class.getCanonicalName(),
org.locationtech.jts.geom.MultiPoint.class.getCanonicalName(),
org.locationtech.jts.geom.GeometryCollection.class.getCanonicalName(),
"jts_geometry"
};
}
@Override
public String getName() {
return "jts_geometry";
}
}

View File

@ -12,7 +12,7 @@ import java.io.Serializable;
* Describes the features of a spatially enabled dialect. * Describes the features of a spatially enabled dialect.
* *
* @author Karel Maesen * @author Karel Maesen
* @deprecated To be removed in 6 * @deprecated SpatialDialects are no longer needed since Hibernate 6.0
*/ */
@Deprecated @Deprecated
public interface SpatialDialect extends Serializable { public interface SpatialDialect extends Serializable {

View File

@ -11,13 +11,37 @@ import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
import org.hibernate.spatial.JTSGeometryJavaTypeDescriptor;
/** /**
* Internal contract for Type and Function Contributors * Internal contract for Type and Function Contributors
*/ */
public interface ContributorImplementor { public interface ContributorImplementor {
void contributeTypes(TypeContributions typeContributions); default void contributeJavaTypes(TypeContributions typeContributions) {
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.GEOMETRY_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.POINT_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.LINESTRING_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.POLYGON_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.MULTIPOINT_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.MULTILINESTRING_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.MULTIPOLYGON_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.GEOMETRYCOLL_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.GEOMETRY_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.POINT_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.LINESTRING_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.POLYGON_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.MULTIPOINT_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.MULTILINESTRING_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.MULTIPOLYGON_INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.GEOMETRYCOLL_INSTANCE );
}
void contributeJdbcTypes(TypeContributions typeContributions);
void contributeFunctions(FunctionContributions functionContributions); void contributeFunctions(FunctionContributions functionContributions);

View File

@ -18,7 +18,8 @@ public class SpatialTypeContributor implements TypeContributor {
ContributorImplementor contributorImplementor = ContributorResolver.resolveSpatialtypeContributorImplementor( serviceRegistry ); ContributorImplementor contributorImplementor = ContributorResolver.resolveSpatialtypeContributorImplementor( serviceRegistry );
if (contributorImplementor != null) { if (contributorImplementor != null) {
contributorImplementor.contributeTypes( typeContributions ); contributorImplementor.contributeJavaTypes( typeContributions );
contributorImplementor.contributeJdbcTypes( typeContributions );
} }
} }

View File

@ -12,9 +12,7 @@ import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.FunctionKey; import org.hibernate.spatial.FunctionKey;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.contributor.ContributorImplementor; import org.hibernate.spatial.contributor.ContributorImplementor;
import org.hibernate.spatial.dialect.postgis.PGGeometryJdbcType; import org.hibernate.spatial.dialect.postgis.PGGeometryJdbcType;
import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors; import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors;
@ -28,10 +26,9 @@ public class CockroachDbContributor implements ContributorImplementor {
} }
@Override @Override
public void contributeTypes(TypeContributions typeContributions) { public void contributeJdbcTypes(TypeContributions typeContributions) {
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
typeContributions.contributeType( new GeolatteGeometryType( PGGeometryJdbcType.INSTANCE_WKB_2 ) ); typeContributions.contributeJdbcTypeDescriptor( PGGeometryJdbcType.INSTANCE_WKB_2 );
typeContributions.contributeType( new JTSGeometryType( PGGeometryJdbcType.INSTANCE_WKB_2 ) );
} }
@Override @Override

View File

@ -11,12 +11,9 @@ import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.KeyedSqmFunctionDescriptors; import org.hibernate.spatial.KeyedSqmFunctionDescriptors;
import org.hibernate.spatial.contributor.ContributorImplementor; import org.hibernate.spatial.contributor.ContributorImplementor;
import org.hibernate.spatial.dialect.postgis.PostgisSqmFunctionDescriptors;
public class H2GisDialectContributor implements ContributorImplementor { public class H2GisDialectContributor implements ContributorImplementor {
@ -26,10 +23,9 @@ public class H2GisDialectContributor implements ContributorImplementor {
this.serviceRegistryegistry = serviceRegistry; this.serviceRegistryegistry = serviceRegistry;
} }
public void contributeTypes(TypeContributions typeContributions) { public void contributeJdbcTypes(TypeContributions typeContributions) {
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
typeContributions.contributeType( new GeolatteGeometryType( H2GISGeometryType.INSTANCE ) ); typeContributions.contributeJdbcTypeDescriptor( H2GISGeometryType.INSTANCE );
typeContributions.contributeType( new JTSGeometryType( H2GISGeometryType.INSTANCE ) );
} }
@Override @Override

View File

@ -11,9 +11,7 @@ import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.KeyedSqmFunctionDescriptors; import org.hibernate.spatial.KeyedSqmFunctionDescriptors;
import org.hibernate.spatial.contributor.ContributorImplementor; import org.hibernate.spatial.contributor.ContributorImplementor;
import org.hibernate.spatial.dialect.mysql.MySQLGeometryJdbcType; import org.hibernate.spatial.dialect.mysql.MySQLGeometryJdbcType;
@ -26,10 +24,9 @@ public class MariaDBDialectContributor implements ContributorImplementor {
this.serviceRegistry = serviceRegistry; this.serviceRegistry = serviceRegistry;
} }
public void contributeTypes(TypeContributions typeContributions) { public void contributeJdbcTypes(TypeContributions typeContributions) {
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
typeContributions.contributeType( new GeolatteGeometryType( MySQLGeometryJdbcType.INSTANCE ) ); typeContributions.contributeJdbcTypeDescriptor( MySQLGeometryJdbcType.INSTANCE );
typeContributions.contributeType( new JTSGeometryType( MySQLGeometryJdbcType.INSTANCE ) );
} }
@Override @Override

View File

@ -11,9 +11,7 @@ import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.KeyedSqmFunctionDescriptors; import org.hibernate.spatial.KeyedSqmFunctionDescriptors;
import org.hibernate.spatial.contributor.ContributorImplementor; import org.hibernate.spatial.contributor.ContributorImplementor;
@ -26,10 +24,9 @@ public class MySQLDialectContributor implements ContributorImplementor {
} }
@Override @Override
public void contributeTypes(TypeContributions typeContributions) { public void contributeJdbcTypes(TypeContributions typeContributions) {
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
typeContributions.contributeType( new GeolatteGeometryType( MySQLGeometryJdbcType.INSTANCE ) ); typeContributions.contributeJdbcTypeDescriptor( MySQLGeometryJdbcType.INSTANCE);
typeContributions.contributeType( new JTSGeometryType( MySQLGeometryJdbcType.INSTANCE ) );
} }
@Override @Override

View File

@ -13,12 +13,8 @@ import org.hibernate.boot.model.TypeContributions;
import org.hibernate.boot.registry.selector.spi.StrategySelector; import org.hibernate.boot.registry.selector.spi.StrategySelector;
import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.HibernateSpatialConfigurationSettings; import org.hibernate.spatial.HibernateSpatialConfigurationSettings;
import org.hibernate.spatial.JTSGeometryJavaTypeDescriptor;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.SpatialDialect; import org.hibernate.spatial.SpatialDialect;
import org.hibernate.spatial.SpatialFunction; import org.hibernate.spatial.SpatialFunction;
import org.hibernate.spatial.SpatialRelation; import org.hibernate.spatial.SpatialRelation;
@ -27,7 +23,6 @@ import org.hibernate.spatial.dialect.WithCustomJPAFilter;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import org.geolatte.geom.codec.Wkt;
import org.geolatte.geom.codec.db.oracle.ConnectionFinder; import org.geolatte.geom.codec.db.oracle.ConnectionFinder;
import org.geolatte.geom.codec.db.oracle.OracleJDBCTypeFactory; import org.geolatte.geom.codec.db.oracle.OracleJDBCTypeFactory;
@ -56,11 +51,7 @@ class OracleSDOSupport implements SpatialDialect, Serializable, WithCustomJPAFil
public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { public void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
final SDOGeometryType sdoGeometryTypeDescriptor = mkSdoGeometryTypeDescriptor( serviceRegistry ); final SDOGeometryType sdoGeometryTypeDescriptor = mkSdoGeometryTypeDescriptor( serviceRegistry );
typeContributions.contributeType( new GeolatteGeometryType( sdoGeometryTypeDescriptor ) );
typeContributions.contributeType( new JTSGeometryType( sdoGeometryTypeDescriptor ) );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.INSTANCE );
} }
private SDOGeometryType mkSdoGeometryTypeDescriptor(ServiceRegistry serviceRegistry) { private SDOGeometryType mkSdoGeometryTypeDescriptor(ServiceRegistry serviceRegistry) {

View File

@ -11,11 +11,7 @@ import org.hibernate.boot.model.FunctionContributions;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionRegistry; import org.hibernate.query.sqm.function.SqmFunctionRegistry;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.HSMessageLogger; import org.hibernate.spatial.HSMessageLogger;
import org.hibernate.spatial.JTSGeometryJavaTypeDescriptor;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.contributor.ContributorImplementor; import org.hibernate.spatial.contributor.ContributorImplementor;
public class PostgisDialectContributor implements ContributorImplementor { public class PostgisDialectContributor implements ContributorImplementor {
@ -26,12 +22,9 @@ public class PostgisDialectContributor implements ContributorImplementor {
this.serviceRegistryegistry = serviceRegistry; this.serviceRegistryegistry = serviceRegistry;
} }
public void contributeTypes(TypeContributions typeContributions) { @Override
public void contributeJdbcTypes(TypeContributions typeContributions) {
HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() ); HSMessageLogger.LOGGER.typeContributions( this.getClass().getCanonicalName() );
// typeContributions.contributeType( new GeolatteGeometryType( PGGeometryJdbcType.INSTANCE_WKB_2 ) );
// typeContributions.contributeType( new JTSGeometryType( PGGeometryJdbcType.INSTANCE_WKB_2 ) );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.INSTANCE );
typeContributions.contributeJdbcTypeDescriptor( PGGeometryJdbcType.INSTANCE_WKB_2 ); typeContributions.contributeJdbcTypeDescriptor( PGGeometryJdbcType.INSTANCE_WKB_2 );
} }

View File

@ -12,10 +12,6 @@ import java.util.Map;
import org.hibernate.boot.model.TypeContributions; import org.hibernate.boot.model.TypeContributions;
import org.hibernate.query.sqm.function.SqmFunctionDescriptor; import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
import org.hibernate.spatial.GeolatteGeometryType;
import org.hibernate.spatial.JTSGeometryJavaTypeDescriptor;
import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.SpatialDialect; import org.hibernate.spatial.SpatialDialect;
import org.hibernate.spatial.SpatialFunction; import org.hibernate.spatial.SpatialFunction;
import org.hibernate.spatial.SpatialRelation; import org.hibernate.spatial.SpatialRelation;
@ -32,11 +28,6 @@ class SqlServerSupport implements SpatialDialect, Serializable {
} }
void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { void contributeTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
typeContributions.contributeType( new GeolatteGeometryType( SqlServer2008GeometryType.INSTANCE ) );
typeContributions.contributeType( new JTSGeometryType( SqlServer2008GeometryType.INSTANCE ) );
typeContributions.contributeJavaTypeDescriptor( GeolatteGeometryJavaTypeDescriptor.INSTANCE );
typeContributions.contributeJavaTypeDescriptor( JTSGeometryJavaTypeDescriptor.INSTANCE );
} }

View File

@ -0,0 +1,92 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.spatial.mapping;
import org.hibernate.metamodel.mapping.ModelPart;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.spatial.GeolatteGeometryJavaTypeDescriptor;
import org.hibernate.type.descriptor.java.spi.JavaTypeRegistry;
import org.hibernate.type.descriptor.jdbc.spi.JdbcTypeRegistry;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.ServiceRegistry;
import org.hibernate.testing.orm.junit.SessionFactory;
import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.Test;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import org.geolatte.geom.C2D;
import org.geolatte.geom.MultiLineString;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
@DomainModel(annotatedClasses = { MLEntity.class })
@ServiceRegistry
@SessionFactory
public class GeometryMappingTest {
@Test
public void testSimpleEntity(SessionFactoryScope scope) {
final EntityPersister entityDescriptor = scope.getSessionFactory()
.getDomainModel()
.getEntityDescriptor( MLEntity.class );
final JdbcTypeRegistry jdbcTypeRegistry = entityDescriptor.getFactory()
.getTypeConfiguration()
.getJdbcTypeDescriptorRegistry();
final JavaTypeRegistry javaTypeRegistry = entityDescriptor.getFactory()
.getTypeConfiguration()
.getJavaTypeDescriptorRegistry();
ModelPart part = entityDescriptor.findSubPart( "lineString" );
assertThat( part.getJavaTypeDescriptor(), equalTo( GeolatteGeometryJavaTypeDescriptor.MULTILINESTRING_INSTANCE ) );
}
}
@Entity
class MLEntity {
@Id
private Integer id;
private String type;
private MultiLineString<C2D> lineString;
public MLEntity(Integer id, String type, MultiLineString<C2D> lineString) {
this.id = id;
this.type = type;
this.lineString = lineString;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public MultiLineString<C2D> getLineString() {
return lineString;
}
public void setLineString(MultiLineString<C2D> lineString) {
this.lineString = lineString;
}
}

View File

@ -52,7 +52,7 @@ public class GeometryConverterTest extends BaseUnitTestCase {
assertThat( assertThat(
typeConfiguration.getJavaTypeDescriptorRegistry().getDescriptor( Geometry.class ), typeConfiguration.getJavaTypeDescriptorRegistry().getDescriptor( Geometry.class ),
sameInstance( GeolatteGeometryJavaTypeDescriptor.INSTANCE ) sameInstance( GeolatteGeometryJavaTypeDescriptor.GEOMETRY_INSTANCE )
); );
// todo (5.3) : what to assert wrt to SqlTypeDescriptor? Anything? // todo (5.3) : what to assert wrt to SqlTypeDescriptor? Anything?

View File

@ -24,7 +24,7 @@ import org.locationtech.jts.geom.Point;
public class SDOGeometryExpectationsFactory extends AbstractExpectationsFactory { public class SDOGeometryExpectationsFactory extends AbstractExpectationsFactory {
private final SDOGeometryValueExtractor decoder = new SDOGeometryValueExtractor( private final SDOGeometryValueExtractor decoder = new SDOGeometryValueExtractor(
JTSGeometryJavaTypeDescriptor.INSTANCE, JTSGeometryJavaTypeDescriptor.GEOMETRY_INSTANCE,
null null
); );