現在、neo4j を使用した Java プロジェクトに取り組んでいます。
Spring Data Neo4jを使用し、グッド リレーションシップブックからほとんどの情報を取得します。
このドキュメントでは、グラフの標準エンティティ タイプ表現は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 クラスのソース コードを詳しく調べ始めました。Strategy は非公開の列挙型であることがわかりました。これは、私が提供しようとした 2 番目のコンストラクター引数です。私のプロジェクトでは、タイプ Strategy としてそれを検出することはありませんでした。
ストラテジーは非公開なので、最初は少し懐疑的でした。つまり、タイプ Strategy が見つからないため、コードで TypeRepresentationStrategyFactory をインスタンス化することさえできませんでした。私はすぐに、Spring がそのようなことを実行できると思われることを知りました: Beans with private constructor。
最終的に、コンストラクターの引数をまったく識別していなかったため、Michael のソリューションを調整する必要がありました。私が何をしたとしても。多分それは私の設定です、私は本当に知りません。しかし、最終的に、プライベート列挙から Beanを作成し、これをコンストラクターへの参照として提供するソリューションを思いつきました。
<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>