2017-10-09 6 views
0

위치에서 가장 가까운 지점을 찾기 위해 공간 쿼리를 작성했습니다. 그러나 최대 절전 모드에서는 예외가 발생합니다. 1.5.7최대 절전 모드 jpa 쿼리가 작동하지 않습니다.

@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); 
} 

여기에 봄 부팅과 함께 내 응용 프로그램 내 엔티티 클래스 PARAM은

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

@Type(type = "org.hibernate.spatial.GeometryType") 
@Column(name = "LOCATION",columnDefinition = "POINT") 
    private Point location; 
} 

기타에 Params 여기

@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; 

내 build.gradle 있습니다.

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) 

구성과 관련하여 실수가 있습니까?

+0

구성 스프링 클래스 표시 및 주석이있는 엔터티 클래스 정의 –

+0

업데이트 된 질문 본문. 확인해주십시오. – flopcoder

+1

'PlaceEntity' 코드를 추가하십시오. –

답변

0

당신은 장소 (@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 {} 
+0

고마워요. 그 일. :) – flopcoder