Spring Hibernate空间jpa查询不工作

Spring Hibernate空间jpa查询不工作,spring,spring-boot,hibernate-spatial,Spring,Spring Boot,Hibernate Spatial,我已经编写了空间查询来查找距离某个位置最近的点。但hibernate得到了例外使用Spring boot 1.5.7的我的应用程序 @Repository @Transactional(readOnly = true) public interface PlaceRepository extends JpaRepository<PlaceEntity, Long> { PlaceEntity findByCode(String code); PlaceEntity f

我已经编写了空间查询来查找距离某个位置最近的点。但hibernate得到了例外使用Spring boot 1.5.7的我的应用程序

@Repository
@Transactional(readOnly = true)
public interface PlaceRepository extends JpaRepository<PlaceEntity, Long> {
    PlaceEntity findByCode(String code);
    PlaceEntity findByName(String name);
    @Query("select l from PlaceEntity l where within(l.location, :filter) = true")
    List<PlaceEntity> findLocationWithin(Geometry filter);
}
其他参数是

@Id
@GeneratedValue
@Column(name = "ID")
private long id;
@Column(name = "NAME")
private String name;
@Column(name = "CODE")
private String code;
@Column(name = "LONGITUDE")
private Double longitude;
@Column(name = "LATITUDE")
private Double latitude;
这是我的身材,格雷德尔

compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.hibernate:hibernate-core:4.3.0.Final')
compile("org.hibernate:hibernate-spatial:4.3")
compile("org.hibernate:hibernate-entitymanager:4.3.0.Final")
compile('mysql:mysql-connector-java')
compile('org.projectlombok:lombok:1.14.8')
compile('org.springframework.boot:spring-boot-starter-web')
compile('com.vividsolutions:jts:1.13')
testCompile('org.springframework.boot:spring-boot-starter-test')
配置

@EnableWebMvc
@Configuration
public class AppConfig {

}
但当我部署服务器时,就会出现异常

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'pathController': Unsatisfied dependency expressed through field 'pathService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'pathServiceImpl': Unsatisfied dependency expressed through field 'placeRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.vividsolutions.jts.geom.Geometry)!
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)



Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'pathServiceImpl': Unsatisfied dependency expressed through field 'placeRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.vividsolutions.jts.geom.Geometry)!
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:58


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placeRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.vividsolutions.jts.geom.Geometry)!
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)



Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.vividsolutions.jts.geom.Geometry)!
        at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92)
        at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:62)


Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: PlaceEntity is not mapped [select l from PlaceEntity l where within(l.location, :filter) = true]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)



Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: PlaceEntity is not mapped [select l from PlaceEntity l where within(l.location, :filter) = true]
        at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
        at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)




Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: PlaceEntity is not mapped
        at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
        at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
        at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
org.springframework.beans.factory.UnsatifiedDependencyException:创建名为“pathController”的bean时出错:通过字段“pathService”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifiedpendencyException:创建名为“pathServiceImpl”的bean时出错:通过字段“placeRepository”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“placeRepository”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:方法public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.livitsolutions.jts.geom.Geometry)的查询验证失败!
位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:588)
原因:org.springframework.beans.factory.UnsatifiedDependencyException:创建名为“pathServiceImpl”的bean时出错:通过字段“placeRepository”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“placeRepository”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:方法public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.livitsolutions.jts.geom.Geometry)的查询验证失败!
位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:58
原因:org.springframework.beans.factory.BeanCreationException:创建名为“placeRepository”的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalArgumentException:查询方法public abstract java.util.List com.fm.assignment.core.dao.placeRepository.findLocationWithin时验证失败(com.lividsolutions.jts.geom.Geometry)!
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
原因:java.lang.IllegalArgumentException:查询方法public abstract java.util.List com.fm.assignment.core.dao.PlaceRepository.findLocationWithin(com.livitsolutions.jts.geom.Geometry)的验证失败!
位于org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92)
位于org.springframework.data.jpa.repository.query.SimpleJpaQuery.(SimpleJpaQuery.java:62)
原因:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:PlaceEntity未映射[从PlaceEntity l中选择l,其中位于(l.location,:filter)=true]
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
原因:org.hibernate.hql.internal.ast.QuerySyntaxException:PlaceEntity未映射[从PlaceEntity l中选择l,其中位于(l.location,:filter)=true]
位于org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
位于org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
原因:org.hibernate.hql.internal.ast.QuerySyntaxException:PlaceEntity未映射
位于org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
位于org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
位于org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)

我的配置有错误吗?

您已将实体命名为Place
@entity(name=“Place”)
),但您仍在jpql查询中使用PlaceEntity

像这样试试

select l from Place l where within(l.location, :filter) = true
或者在查询中继续使用
PlaceEntity
,并使用以下注释

@Data
@Entity
@Table(name ="Place")
public class PlaceEntity extends BaseEntity {}

将来使用spring数据jpa存储库中的变量,如{entityName}来避免此类错误

@Query("select l from #{#entityName} l where within(l.location, :filter) = true")

显示配置spring类以及带有注释的实体类定义更新了问题正文。请检查。请添加完整的
PlaceEntity
code。我添加了PlaceEntity。请检查。
@Query("select l from #{#entityName} l where within(l.location, :filter) = true")