首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到SQL -函数“org.hibernate.engine.jdbc.spi.SqlExceptionHelper”;SQL语句

找不到SQL -函数“org.hibernate.engine.jdbc.spi.SqlExceptionHelper”;SQL语句
EN

Stack Overflow用户
提问于 2019-03-19 18:43:47
回答 1查看 706关注 0票数 3

在这里,我试图找到所有在我提供的范围内的实体。我的意思是,如果我给出一个特定半径的圆,它必须显示所有位置坐标位于给定圆内的实体。

我正在使用hibernate-spatial来实现这一点。但是在JPA Repository接口中得到了提到的错误。

这是pom.xml

代码语言:javascript
复制
<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存储库,

代码语言:javascript
复制
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

代码语言:javascript
复制
@Entity
@NoArgsConstructor
public class Resource extends UUIDEntity2 implements IsResource {

    @Type(type = "org.hibernate.spatial.GeometryType")
    @OneToOne
    private Address address;

    /*getters setters*/
}

Address.java

代码语言:javascript
复制
@Entity
public class Address extends UUIDEntity2 implements HasEmailAddress, HasLocation {

    @Embedded
    @Column(columnDefinition = "point")
    private Location location;
    /*getters setters*/
}

location.java

代码语言:javascript
复制
@Embeddable
@Value(staticConstructor = "of")
@RequiredArgsConstructor(staticName = "of")
public class Location implements Serializable {

    @Column(nullable = true)
    private Double lat;

    @Column(nullable = true)
    private Double lon;
}

测试,

代码语言:javascript
复制
    @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

代码语言:javascript
复制
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect

注意:Entities的所有属性都不在这里显示。我正在关注的参考:Hibernate-Spatial

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 21:30:36

听起来您没有配置用于MySQL的SpatialDialect。你能确认一下你是否有线路吗?

代码语言:javascript
复制
hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect

hibernate.properties文件中。

您还可以检查日志以了解Hibernate实际使用的是哪种方言。对于hibernate可用的Spatial函数,它的名称中应该有“Spatial”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55239090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档