Spring Data Neo4j - 跨存储持久性

时间:2012-09-05 06:16:14

标签: spring neo4j spring-data-neo4j spring-data-graph

我是SDN的新手,我正在尝试使用hibernate进行跨存储持久化。网站上给出的tutorial也有相同的例子,我也检查了github。我有两个问题

  1. 我无法按照文档或示例中的说明进行xml配置。 <neo4j:config/>不支持entityManagerFactory。我的假设是它创建了默认Neo4jConfiguration,它没有entityManagerFactory的setter。我找到的解决方法是定义一个CrossStoreNeo4jConfiguration bean。

    @Bean
    public CrossStoreNeo4jConfiguration crossStoreNeo4jConfiguration(){
    CrossStoreNeo4jConfiguration configuration = new CrossStoreNeo4jConfiguration();
    configuration.setEntityManagerFactory(entityManagerFactory);
    configuration.setGraphDatabaseService(graphDatabaseService);
    return configuration;
    }
    

    如何在<neo4j:config/>

  2. 中执行此操作
  3. 使用neo4j-template-ref定义存储库时,使用neo4j:repositories将Neo4jTemplate引用到存储库时会发生什么?目的是什么?

  4. UDPATE

    无法使用CrossStoreNeo4jConfiguration创建<neo4j:config/> was的原因,我错过了依赖spring-data-neo4j-cross-store`。但现在我在应用程序启动时遇到异常。

    Caused by: java.lang.IllegalStateException: Singleton 'nodeEntityStateFactory' isn't currently in creation
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.afterSingletonCreation(DefaultSingletonBeanRegistry.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:239)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:292)
    at org.springframework.data.neo4j.cross_store.config.CrossStoreNeo4jConfiguration$$EnhancerByCGLIB$$779c5955.nodeEntityStateFactory(<generated>)
    at org.springframework.data.neo4j.config.Neo4jConfiguration.mappingContext(Neo4jConfiguration.java:199)
    at org.springframework.data.neo4j.cross_store.config.CrossStoreNeo4jConfiguration$$EnhancerByCGLIB$$779c5955.CGLIB$mappingContext$11(<generated>)
    at org.springframework.data.neo4j.cross_store.config.CrossStoreNeo4jConfiguration$$EnhancerByCGLIB$$779c5955$$FastClassByCGLIB$$3134c8a8.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:280)
    at org.springframework.data.neo4j.cross_store.config.CrossStoreNeo4jConfiguration$$EnhancerByCGLIB$$779c5955.mappingContext(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:149)
    

    提前致谢。

1 个答案:

答案 0 :(得分:1)

这应该有效:

<neo4j:config entityManagerFactory="entityManagerFactory"/>

无需创建自定义实现。

传递给存储库配置的模板是其基础结构使用的模板。在大多数情况下,不需要配置不同的东西。