Java org.hibernate.engine.jdbc.spi.SqlExceptionHelper-函数;内;未找到;SQL语句
在这里,我试图找到我提供的范围内的所有实体。我的意思是,如果我给一个特定半径的圆,它必须显示所有的实体,它们的位置坐标都位于给定的圆内 我正在使用hibernate spatial来实现这一点。但是在JPA存储库接口中获取提到的错误 下面是Java org.hibernate.engine.jdbc.spi.SqlExceptionHelper-函数;内;未找到;SQL语句,java,spring-boot,jpa,hibernate-spatial,Java,Spring Boot,Jpa,Hibernate Spatial,在这里,我试图找到我提供的范围内的所有实体。我的意思是,如果我给一个特定半径的圆,它必须显示所有的实体,它们的位置坐标都位于给定的圆内 我正在使用hibernate spatial来实现这一点。但是在JPA存储库接口中获取提到的错误 下面是pom.xml <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</arti
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>
Address.java
@Entity
public class Address extends UUIDEntity2 implements HasEmailAddress, HasLocation {
@Embedded
@Column(columnDefinition = "point")
private Location location;
/*getters setters*/
}
location.java
@Entity
@NoArgsConstructor
public class Resource extends UUIDEntity2 implements IsResource {
@Type(type = "org.hibernate.spatial.GeometryType")
@OneToOne
private Address address;
/*getters setters*/
}
@Embeddable
@Value(staticConstructor = "of")
@RequiredArgsConstructor(staticName = "of")
public class Location implements Serializable {
@Column(nullable = true)
private Double lat;
@Column(nullable = true)
private Double lon;
}
测试
注意:此处未显示实体的所有属性。
参考资料如下:听起来您没有为MySQL配置
SpatialDialect
。你能核实一下你有电话吗
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect
在hibernate.properties
文件中
您还可以检查日志,查看Hibernate实际使用的方言。它的名称中应该有“Spatial”,以便hibernate可以使用Spatial函数。我在application.properties文件中添加了它。但是日志说它使用的是“org.hibernate.dialoge.h2dialoge”。那么如何配置呢?
@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);
}
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect