无法使用 spring 和休眠 5.0 执行空间查询

Can't execute spatial query with spring and hibernate 5.0

这是我的模型

package objects;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;

import javax.persistence.*;

/**
 * Created by michael on 29/10/15.
 */
@Entity
public class Location {

    public Geometry getShape() {
        return shape;
    }

    public void setShape(Geometry shape) {
        this.shape = shape;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private Geometry shape;

    public Location() {
    }

    @Override
    public String toString() {
        return "Location{" +
                "id=" + id +
                ", shape=" + shape +
                '}';
    }
}

这是我的控制器

@RestController
public class ObjectController {
@Bean
public Module jtsModule() {
    return new JtsModule();
}

@Autowired
private LocationRepository repository;


@RequestMapping(name = "/shape", method = RequestMethod.POST)
public Collection<Location> createObjects() throws JsonProcessingException, ParseException {
    WKTReader wktReader = new WKTReader();
    Geometry geom = wktReader.read("POINT(-105 -105)");
    Geometry filter = wktReader.read("POLYGON((-107 39, -102 41, -107 41, -107 39))");
    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JtsModule());
    Location location = new Location();
    GeometryFactory factory = new GeometryFactory();
    GeometricShapeFactory f = new GeometricShapeFactory(factory);
    location.setShape(geom);
    repository.save(location);
    f.setCentre(new Coordinate(50, 50));
    f.setSize(100);
    Polygon circle = f.createCircle();

    return repository.findWithin(filter);

}

}

这是我的存储库

@Repository
public interface LocationRepository extends CrudRepository<Location, Long> {
    @Query("select l from Location l where within(l.shape, ?) = true")
    List<Location> findWithin(Geometry geometry);
}

这是我的配置

spring:
  profiles: production

  datasource:
    platform: postgres
    url: jdbc:postgresql://192.168.99.100:5432/db
    username: user
    password: password

  database:
    driverClassName: org.postgresql.Driver

  jpa:
    database: POSTGRESQL
    platform: postgres
    show-sql: true
    ddl-auto: update
    hibernate:
      spatial:
        dialect:
          postgis: PostgisDialect
---

spring:
  profiles: development

  datasource:
  platform: h2
  url: jdbc:h2:mem:test

  jpa:
    hibernate:
      show-sql: true
      spatial:
        dialect:
          h2geodb: GeoDBDialect

我正在使用 postgis,如果我删除查询并只保存几何图形,它会工作正常。所以我想空间支持真的很有效。

好的,问题出在配置上。

正确的配置应该是这样的

  jpa:
    database: POSTGRESQL
    database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect
    show-sql: true
    hibernate:
      ddl-auto: update