【问题标题】:MappingException: Error mapping GraphModel to instanceMappingException:将 GraphModel 映射到实例时出错
【发布时间】:2015-05-04 15:54:06
【问题描述】:

我正在尝试使用带有 SDN 4.0.0.M1 和 SpringBoot 的 new Cineasts 应用程序来学习 Spring 和 Neo4j,但是当我尝试使用以下命令访问电影 url 时出现错误 卷曲http://localhost:8080/movies

MappingException:将 GraphModel 映射到实例时出错

我实现了最低限度的工作,所以代码很简单,但我可能忘记了一些东西

电影类

 @NodeEntity
    public class Movie {
    @GraphId
    private Long nodeId;

    private String id;
    private String title;

    public Movie() {
    }

    public Movie(String id, String title) {
        this.id = id;
        this.title = title;
    }
}

相关的 MovieRepository 目前为空

public interface MovieRepository extends GraphRepository<Movie> {
}

电影控制器

@Autowired
private MovieRepository movieRepository;
@Autowired
private Session session;

@RequestMapping(value = "/movies/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public
@ResponseBody
Movie getMovie(@PathVariable String id) {
    return IteratorUtil.firstOrNull(findMovieByProperty("id", id));
}

public Iterable<Movie> findMovieByProperty(String propertyName, Object propertyValue) {
    return session.loadByProperty(Movie.class, new Property(propertyName, propertyValue));
}

以及与数据库连接的主类

@SpringBootApplication
@EnableNeo4jRepositories("cineasts.repository")
@EnableTransactionManagement
public class CineastsApplication extends Neo4jConfiguration {

    public static final int NEO4J_PORT = 7474;

    @Bean
    public Neo4jServer neo4jServer() {
        return new RemoteServer("http://localhost:" + NEO4J_PORT);
    }

    @Override
    public SessionFactory getSessionFactory() {
        return new SessionFactory("org.neo4j.cineasts.domain");
    }

    @Override
    @Bean
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public Session getSession() throws Exception {
        return super.getSession();
    }

    public static void main(String[] args) {
        SpringApplication.run(CineastsApplication.class, args);
    }
}

我启动了 Neo4j 并用 Neo4j 浏览器添加了一条记录

CREATE (m:Movie {id:1, name:'The Matrix'}) return m

当我转到 localhost:8080 时,我可以看到 json 响应

{
  "_links" : {
    "movies" : {
      "href" : "http://localhost:8080/movies"
    },
    "profile" : {
      "href" : "http://localhost:8080/alps"
    }
}

但它无法显示我刚刚创建的电影或http://localhost:8080/movies/1 记录。有什么想法可以解决这个问题或获得更相关的消息吗?

谢谢!

【问题讨论】:

  • 请发布您的电影控制器代码。
  • 添加了 MovieController

标签: neo4j spring-boot spring-data-neo4j spring-data-neo4j-4


【解决方案1】:

问题可能是您的实体定义与您创建的节点的定义不匹配。 Movie 类定义了一个数据类型为 String 的属性 id,以及一个属性为 title 的 String 类型。

但是你使用的 Cypher

CREATE (m:Movie {id:1, name:'The Matrix'}) return m

使用数字 id 而不是 String id 和 name 属性而不是 title 属性创建一个节点。

把上面改成

CREATE (m:Movie {id:'1', title:'The Matrix'}) return m

应该修复它。

【讨论】:

  • 谢谢 Luanne,这很明显!
猜你喜欢
  • 2015-10-13
  • 2021-06-20
  • 2020-09-20
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多