Spring数据使用Neo4j和MongoDB [英] Spring data using Neo4j and MongoDB

查看:1501
本文介绍了Spring数据使用Neo4j和MongoDB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是想疯了,我只花了几个小时来尝试使用Spring的数据 Neo4J ,使用spring数据 MongoDB 是一个散步
与spring数据管理两个数据存储Mongo,Neo4j。
(如果我错了,请纠正我,但没有弹簧数据交叉数据存储支持这两个,这意味着我将使用不同的域实体为每个商店)_
2)使用Neo4J嵌入式图表。

3)可以透过网页管理员等客户端监控图表。



我开始使用良好关系spring数据示例
,其中使用:

  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 for embedded图形配置



和繁荣!

 原因:org.springframework.beans.factory.BeanCreationException:无法自动连接字段:private com.haze .server.repository.mongo.ProfileRepository com.haze.server.services.ProfileServices.profileRepository;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'profileRepository'的bean时出错:FactoryBean在对象创建时抛出异常;嵌套异常是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)
在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java: 87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
... 39更多
Caused by:org.springframework.beans.factory .BeanCreationException:创建名为'profileRepository'的bean时出错:FactoryBean在创建对象时抛出异常;嵌套异常是java.lang.NoSuchMethodError:org.springframework.data.repository.core.RepositoryMetadata.getDomainClass()Ljava / lang / Class;
在org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
在org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
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)
在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:818)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 41更多
原因: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)
在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嵌入式图形和服务器包装器为了监视图表从web管理员与mongo作为我的主要数据存储。



使用旧版本的neo4j服务器包装器的快乐但可悲的原因(1.6因为这是唯一的工作)我有动机开始工作



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

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


尝试一些基本操作:

  //保存节点 -  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:只读index
graphRepo.delete(profile);




我尝试的每一个基本操作都没有为我工作。



我不知道是因为我的mishmash配置出现问题还是我在做错误在我的代码,可以有人请帮助我配置我的应用程序或让我知道为什么通过弹簧数据的最基本的操作不能为我工作。



谢谢。

解决方案

请按照Lasse说明更新到2.1.RC4。



关于使用带有SDN的嵌入式服务器,请参阅 docs



您的存储库是什么样的?


I am just about to go crazy,I just spent many hours to try work with spring-data for Neo4J,working with spring-data for MongoDB was a walk in the park compared to that.

My goals:
1) Working with spring-data to manage two data-stores Mongo,Neo4j. (correct me if I am wrong but there is no spring-data cross data store support for these two, which mean I will use different domain entities for each store)
2) Working with Neo4J embedded graph.
3) Will have the ability to monitor the graph with some client like the web admin.

So I started with Good Relationship spring-data example , where using :

       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"/>

So my first question is how can I monitor the graph In that configuration, in which client?
So I read more and I got to Neo4j Web Admin for embedded graph configuration

I followed every step tried it and boom!

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


Make long story short the only version configuration I find to get spring context to load is

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


If I am adding the below dependency like specify in the article it crashed.

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


Ok so I got it working after many hours with the neo4j embedded graph and the server wrapper in order to monitor the graph from the web admin with mongo as my primary datastore.

Kind of happy but sad cause using old version for the neo4j server wrapper (1.6 cause that is the only thing which worked) I was motivated to start working with the graph via spring-data.

So I got the most basic node entity:

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


Tried some basic operations:

                     // 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);


Basically almost every basic operation I tried didn't worked for me.

I don't know if the problems occur because of my mishmash configurations or that I am doing something wrong In my code, can someone please help me configure my application or let me know why the most basic operation via spring data doesn't work for me?

Thanks.

解决方案

Please update to 2.1.RC4 as Lasse said.

Regarding using the embedded server with SDN, it is described in the docs.

What does your repository look like?

这篇关于Spring数据使用Neo4j和MongoDB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆