在这里,我试图找到所有在我提供的范围内的实体。我的意思是,如果我给出一个特定半径的圆,它必须显示所有位置坐标位于给定圆内的实体。
我正在使用hibernate-spatial来实现这一点。但是在JPA Repository接口中得到了提到的错误。
这是pom.xml,
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.2.12.Final</version>
</dependency>
<dependency>
<groupId>org.opengeo</groupId>
<artifactId>geodb</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>Jpa存储库,
public interface ResourceRepository extends ExtendedJpaRepository<Resource, String> {
@Query(value = "select resource from Resource resource where within(resource.address.location, :circle) = true")
List<Resource> test(@Param("circle") Geometry circle);
}Resource.java,
@Entity
@NoArgsConstructor
public class Resource extends UUIDEntity2 implements IsResource {
@Type(type = "org.hibernate.spatial.GeometryType")
@OneToOne
private Address address;
/*getters setters*/
}Address.java,
@Entity
public class Address extends UUIDEntity2 implements HasEmailAddress, HasLocation {
@Embedded
@Column(columnDefinition = "point")
private Location location;
/*getters setters*/
}location.java,
@Embeddable
@Value(staticConstructor = "of")
@RequiredArgsConstructor(staticName = "of")
public class Location implements Serializable {
@Column(nullable = true)
private Double lat;
@Column(nullable = true)
private Double lon;
}测试,
@Inject
private ResourceRepository resourceRepository;
public Geometry createCircle(double x, double y, double radius) {
GeometricShapeFactory shapeFactory = new GeometricShapeFactory();
shapeFactory.setNumPoints(32);
shapeFactory.setCentre(new Coordinate(x, y));
shapeFactory.setSize(radius * 2);
return shapeFactory.createCircle();
}
@Test
public void geometry(){
Geometry m = createCircle(0.0, 0.0, 5);
List<Resource> resources = resourceRepository.test(m);
}application.properties,
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect注意:Entities的所有属性都不在这里显示。我正在关注的参考:Hibernate-Spatial
发布于 2019-03-20 21:30:36
听起来您没有配置用于MySQL的SpatialDialect。你能确认一下你是否有线路吗?
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect在hibernate.properties文件中。
您还可以检查日志以了解Hibernate实际使用的是哪种方言。对于hibernate可用的Spatial函数,它的名称中应该有“Spatial”。
https://stackoverflow.com/questions/55239090
复制相似问题