有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用spring和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,如果我删除查询并只保存几何图形,它就可以正常工作。所以我想空间支持真的很有效


共 (1) 个答案

  1. # 1 楼答案

    好吧,问题出在配置上

    正确的配置应该如下所示

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