First Issue: I have an existing code written for hibernate spatial 5 to find records within given radius, which works fine. I am in the process of migrating the code hibernate-spatial 6.1.7.Final. But getting below error:
java.lang.IllegalArgumentException: Passed `invariantType` for function return cannot be null at org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers.invariant(StandardFunctionReturnTypeResolvers.java:45) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final] at org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.function(SqmCriteriaNodeBuilder.java:1495) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final] at org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.function(SqmCriteriaNodeBuilder.java:153) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final] at com.adani.amm.specification.AssetLocationSpecification.toPredicate(AssetLocationSpecification.java:35) ~[classes/:na] As per my debugging so far, it seems that POSTGIS geography function is not supported in the version. Below is a snippet of my code.
public class AssetLocationSpecification implements Specification<Location> { /** * */ private static final long serialVersionUID = 1L; private final Double radius; private final Double latitude; private final Double longitude; public AssetLocationSpecification(Double radius, Double latitude, Double longitude) { super(); this.radius = radius; this.latitude = latitude; this.longitude = longitude; } @Override public Predicate toPredicate(Root<Location> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { Expression<Geometry> geography = criteriaBuilder.function("geography", Geometry.class, root.get("geometry")); Expression<Point> point = criteriaBuilder.function("ST_Point", Point.class, criteriaBuilder.literal(longitude), criteriaBuilder.literal(latitude)); Expression<Point> centerPoint = criteriaBuilder.function("ST_SetSRID", Point.class, point, criteriaBuilder.literal(4326)); Expression<Boolean> expression = criteriaBuilder.function(SpatialFunction.dwithin.toString(), boolean.class, geography, centerPoint, criteriaBuilder.literal(radius)); return criteriaBuilder.equal(expression, true); } } Second Issue: org.hibernate.spatial.SpatialFunction.dwithin is deprecated and replacement enum (org.hibernate.spatial.CommonSpatialFunction) does not contain that function.