1

我快要发疯了,我花了很多时间尝试使用Neo4J的 spring-data ,相比之下,使用MongoDB的 spring-data 就像在公园里散步一样。

我的目标:
1)使用 spring-data 来管理两个数据存储 Mongo、Neo4j。(如果我错了,请纠正我,但是这两个没有 spring-data 跨数据存储支持,这意味着我将为每个存储使用不同的域实体)
2)使用 Neo4J 嵌入式图。
3) 将能够使用一些客户端(如 Web 管理员)监控图形。

所以我从良好的关系 spring-data 示例开始 ,其中使用:

       POM
       <dependency>
          <groupId>org.springframework.data</groupId>
           <artifactId>spring-data-neo4j</artifactId>
          <version>2.0.0.RELEASE</version>
       </dependency>
       XML
       <neo4j:config storeDirectory="data/graph.db"/>

所以我的第一个问题是如何在该配置中监控图形,在哪个客户端?
因此,我阅读了更多内容,并使用Neo4j Web Admin 进行嵌入式图形配置

我跟着每一步都试过了,砰!

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.haze.server.repository.mongo.ProfileRepository com.haze.server.services.ProfileServices.profileRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'profileRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NoSuchMethodError: org.springframework.data.repository.core.RepositoryMetadata.getDomainClass()Ljava/lang/Class;
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
... 39 more
 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'profileRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NoSuchMethodError: org.springframework.data.repository.core.RepositoryMetadata.getDomainClass()Ljava/lang/Class;
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:876)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 41 more
  Caused by: java.lang.NoSuchMethodError: org.springframework.data.repository.core.RepositoryMetadata.getDomainClass()Ljava/lang/Class;
at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:84)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:137)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:125)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:41)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 49 more


长话短说,我发现加载弹簧上下文的唯一版本配置是

      <spring.data.mongo.version>1.0.4.RELEASE</spring.data.mongo.version>
   <neo4j.version>1.6</neo4j.version>
   <spring-data-neo4j.version>2.0.1.RELEASE</spring-data-neo4j.version>


如果我添加下面的依赖项,如在文章中指定它会崩溃。

 <spring-data-commons-core.version>1.3.0.RELEASE</spring-data-commons-core.version> 


好的,所以我在使用 neo4j 嵌入式图形和服务器包装器数小时后让它工作,以便使用 mongo 作为我的主要数据存储来监视来自 Web 管理员的图形。

使用旧版本的 neo4j 服务器包装器(1.6 版本是唯一有效的)有点高兴但悲伤的原因,我有动力开始通过 spring-data 使用图表。

所以我得到了最基本的节点实体:

@NodeEntity
public class ProfileNode {
@GraphId
private Long id;
@Indexed(unique = true)
private String pid = null;
}


尝试了一些基本操作:

                     // save node - OK
        ProfileNode node = new ProfileNode();
        node.setPid("44ed79b3ea8a99117aa601b16e916ddr");
        ProfileNode profile = graphRepo.save(node);

        // return NULL
        node = graphRepo.findByPropertyValue("pid",
                "44ed79b3ea8a99117aa601b16e916ddr");
        // throwing exception -    java.lang.UnsupportedOperationException:read only index                 
        graphRepo.delete(profile);


基本上我尝试过的几乎所有基本操作都对我不起作用。

我不知道问题是因为我的混杂配置还是我做错了什么在我的代码中,有人可以帮我配置我的应用程序,或者让我知道为什么通过 spring 数据进行最基本的操作不起作用我?

谢谢。

4

3 回答 3

0

你真的应该升级到 SDN 2.1.RC4,它会在几周后作为 GA 发布。

其次,这里有一些代码可以帮助您入门:https ://github.com/SpringSource/spring-data-neo4j/blob/master/spring-data-neo4j/src/test/java/org/springframework/data/neo4j /repository/DerivedFinderTests.java - 如果您不喜欢派生的查找器,您可以为 findByPropertyValue 添加一个测试,但至少使用该单个文件可以开箱即用,即您可以消除 Spring 配置作为错误来源。

对于跨存储:我认为 MongoDB 的跨存储没什么意义,对我来说,跨存储就是跨多个数据源的事务。使用 MongoDB + Neo,我只需构建不同的存储库,在应用程序级别上就足以同时使用它们。

于 2012-10-01T08:24:12.900 回答
0

如 Lasse 所说,请更新到 2.1.RC4。

关于使用带有 SDN 的嵌入式服务器,文档中有描述。

您的存储库是什么样的?

于 2012-10-07T21:55:44.387 回答
0

你必须有spring-data-mongodb-1.1.0.RC1spring-data-neo4j-2.1.0.RC4。两者具有相同的spring-data-commons-core依赖关系。

spring-data 与 neo4j + mongo 版本冲突

于 2012-10-10T14:31:19.800 回答