2016-06-03 1 views
1

Я используюОшибка на Mapping @QueryResult

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-neo4j</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-server</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

Когда я модульное тестирование с моим запросом, исключение я получил это

10:27:24.803 [http-nio-8080-exec-8] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/rest-api] threw exception [Request processing failed; nested exception is org.neo4j.ogm.metadata.MappingException: Error mapping to ad-hoc class com.lyreco.lab.neo4j.entity.CategoryResult. At present, only @QueryResult types that are discovered by the domain entity package scanning can be mapped.] with root cause 
org.neo4j.ogm.metadata.MappingException: Error mapping to ad-hoc class com.lyreco.lab.neo4j.entity.CategoryResult. At present, only @QueryResult types that are discovered by the domain entity package scanning can be mapped. 

Вот мой класс CategoryResult

package com.lyreco.lab.neo4j.entity; 
import org.springframework.data.neo4j.annotation.QueryResult; 
import com.lyreco.lab.bean.CategoryVO; 

@QueryResult 
public class CategoryResult { 
    private Long neo4jId; 
    private String uuid; 
    private String name; 
    private CategoryVO parent = new CategoryVO(); 
    private long numberItems; 
... 

Это мой класс применения

package com.lyreco.lab.configuration; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; 
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; 
import org.springframework.boot.context.embedded.ErrorPage; 
import org.springframework.boot.context.web.SpringBootServletInitializer; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Import; 
import org.springframework.data.web.config.EnableSpringDataWebSupport; 
import org.springframework.hateoas.config.EnableHypermediaSupport; 
import org.springframework.http.HttpStatus; 
import org.springframework.web.servlet.config.annotation.CorsRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@SpringBootApplication 
@EnableHypermediaSupport(type = { EnableHypermediaSupport.HypermediaType.HAL }) 
@EnableSpringDataWebSupport 
@ComponentScan(basePackages = { "com.lyreco.lab.api", "com.lyreco.lab.service", "com.lyreco.lab.neo4j", 
     "com.lyreco.lab.security" }) 
@Import({ SwaggerConfig.class, Neo4jConfig.class, SpringSecurityConfig.class }) 
public class Application extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 
    } 

    @Bean 
    public EmbeddedServletContainerCustomizer containerCustomizer() { 

     return new EmbeddedServletContainerCustomizer() { 
      @Override 
      public void customize(ConfigurableEmbeddedServletContainer container) { 
       ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); 
       ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); 
       ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); 

       container.addErrorPages(error401Page, error404Page, error500Page); 
      } 
     }; 
    } 

    @Bean 
    public WebMvcConfigurer corsConfigurer() { 
     return new WebMvcConfigurerAdapter() { 

      @Override 
      public void addCorsMappings(CorsRegistry registry) { 
       registry.addMapping("/rest-api/**").allowedOrigins("http://localhost:9000"); 
      } 
     }; 
    } 
} 

Вот мой SessionFactory

package com.lyreco.lab.configuration; 

import java.util.UUID; 

import org.neo4j.ogm.session.SessionFactory; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.ApplicationListener; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; 
import org.springframework.data.neo4j.config.Neo4jConfiguration; 
import org.springframework.data.neo4j.event.BeforeSaveEvent; 
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; 
import org.springframework.data.neo4j.server.Neo4jServer; 
import org.springframework.data.neo4j.server.RemoteServer; 
import org.springframework.data.neo4j.template.Neo4jOperations; 
import org.springframework.data.neo4j.template.Neo4jTemplate; 
import org.springframework.transaction.annotation.EnableTransactionManagement; 

import com.lyreco.lab.neo4j.entity.DomainEntity; 

@Configuration 
@EnableNeo4jRepositories("com.lyreco.lab.neo4j.repository") 
@EnableTransactionManagement 
@PropertySource("classpath:application.properties") 
class Neo4jConfig extends Neo4jConfiguration { 

    @Value("${neo4j.server.url}") 
    private String serverAddress; 

    @Override 
    public SessionFactory getSessionFactory() { 
     return new SessionFactory("com.lyreco.lab.neo4j.entity"); 
    } 

    @Override 
    public Neo4jServer neo4jServer() { 
     return new RemoteServer(serverAddress); 
    } 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @Bean 
    ApplicationListener<BeforeSaveEvent> beforeSaveEventApplicationListener() { 
     return new ApplicationListener<BeforeSaveEvent>() { 
      @Override 
      public void onApplicationEvent(BeforeSaveEvent event) { 
       DomainEntity entity = (DomainEntity) event.getEntity(); 
       entity.setUuid(UUID.randomUUID().toString()); 
      } 
     }; 
    } 

    // TODO : Bug fix 
    // cf. 
    // http://stackoverflow.com/questions/30604863/spring-data-neo4j-4-0-0-beforesaveevent-not-firing 
    // cf. https://jira.spring.io/browse/DATAGRAPH-710 
    @Bean 
    public Neo4jOperations getNeo4jTemplate() throws Exception { 
     return new Neo4jTemplate(getSession()); 
    } 
} 

Не уверен, что ошибка с моим кодом.

Может кто-нибудь помочь мне взглянуть, спасибо.

ответ

3

Это исключение указывает, что пакет, содержащий @QueryResult com.lyreco.lab.neo4j.entity, не сканируется. Пожалуйста, проверьте список пакетов, поставляемых на SessionFactory.

+0

Эта строка '@ComponentScan (basePackages = {" com.lyreco.lab.api "," com.lyreco.lab.service "," com.lyreco.lab.neo4j ", " com.lyreco.lab. security "})' scan my 'com.lyreco.lab.neo4j.entity' – Mercer

+0

Как настроить SessionFactory? – Luanne

+0

У меня есть обновление моего сообщения с помощью 'SessionFactory' – Mercer