为Neo4j配置TypeRepresentationStrategy

时间:2012-05-30 12:40:14

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

我们目前正在使用neo4j开发Java项目。

我们使用Spring Data Neo4j并从Good Relationships一书中获取大部分信息。

本文档指出,图表中的标准实体类型表示为IndexingNodeTypeRepresentationStrategy

对于我们的项目,我们更喜欢具有子引用节点的那个。

在处理存储库时,我们如何配置neo4j以使用此策略。我们从HelloWorld示例开始,因此我们目前有一个存储库接口,如下所示:

public interface IWebsiteGraphRepository extends GraphRepository<Website> {}

此外,我们有节点实体(我省略了大部分不相关的代码):

@NodeEntity
public class Website {
    ...
}

任何人都可以提供一个如何设置TypeRepresentationStrategy的小例子吗?

可以在Spring配置中完成吗?

配置将是:

<context:annotation-config />
<tx:annotation-driven mode="aspectj" transaction-manager="neo4jTransactionManager" />
<context:component-scan base-package="my.base">
    <context:exclude-filter type="annotation" 
                  expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
<neo4j:config storeDirectory="target/neo4j-db" />
<neo4j:repositories base-package="my.base.packages.repositories" />

修改

在另一场会议之后,我终于能够让它发挥作用!我开始基于Michael Hungers的回答,但是无法创建Bean。我发现他的榜样可能来自:gitHub。然而,这仍然不适合我。我开始深入研究TypeRepresentationStrategyFactory类的源代码。我发现,该策略是一个私人枚举。这是我试图提供的第二个构造函数arg。在我的项目中,它从未检测到类型为策略。

首先,我有点怀疑,因为策略是私人的。我的意思是,我甚至无法在Code中实现TypeRepresentationStrategyFactory,因为它找不到类型策略。我很快发现,Spring应该可以做到这样的事情:Beans with private constructor

最后我不得不调整Michaels解决方案,因为它没有确定构造函数的论点。不管我做了什么。也许这是我的设置,我真的不知道。但最后我提出了创建bean from the private enumeration的解决方案并将其作为构造函数的引用提供:

<bean id="subref" factory-method="valueOf"
class="org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory.Strategy">
    <constructor-arg>
        <value>SubRef</value>
    </constructor-arg>
</bean>

<bean id="typeRepresentationStrategyFactory"
    class="org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory">
    <constructor-arg index="0" ref="delegatingGraphDatabase" />
    <constructor-arg index="1" ref="subref" />
</bean>

2 个答案:

答案 0 :(得分:3)

这应该做:

<bean id="typeRepresentationStrategyFactory" class="org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory">
    <constructor-arg index="0" ref="graphDatabaseService"/>
    <constructor-arg index="1" value="SubRef"/>
</bean>

答案 1 :(得分:0)

你可以这样做:

<bean id="typeRepresentationStrategyFactory" class="org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory">
    <constructor-arg index="0" ref="graphDatabaseService"/>
    <constructor-arg index="1">
        <value type="org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory.Strategy">SubRef</value>
    </constructor-arg>
</bean>