【问题标题】:Can't execute spatial query with spring and hibernate 5.0无法使用 spring 和 hibernate 5.0 执行空间查询
【发布时间】:2016-02-03 17:32:42
【问题描述】:

这是我的模型

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,如果我要删除查询并只保存几何图形,它会正常工作。所以我猜空间支持确实有效。

【问题讨论】:

    标签: java spring hibernate postgis


    【解决方案1】:

    好的,问题出在配置上。

    正确的配置应该是这样的

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

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 2012-06-09
      • 1970-01-01
      • 2010-11-22
      • 2020-02-21
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多