問題タブ [spring-data-graph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 指定されたプロパティ値を持つノードを取得するためのCypherクエリ
Spring DataGraphのCypherQueriesは初めてなので、これは非常に簡単かもしれません...
いくつかのプロパティに指定された値を持つすべてのノードをフェッチするためのCypherクエリは何でしょうか。したがって、???
次の@Queryアノテーションには何が含まれるのでしょうか。
編集: それで、私はサイファーの依存関係を追加することによって派生クエリを使用することができました(以下のマイケルによって提案されたように)。しかし、私は以下のエラーが発生しているようです:
string matching regex (?i)\Qreturn\E' expected but ,' found
これは、次のようなクエリを作成しているように見えるためだと思います。
start n=node:__types__(className="com.example.MyObject") where n.property1 = {0}, n.property2 = {1} return n
それよりも
start n=node:__types__(className="com.example.MyObject") where n.property1 = {0} and n.property2 = {1} return n
(クエリでは,
なくに注意してください)and
前もって感謝します。
spring - 永続化を2回呼び出さずに、SpringDataGraphでNeo4JNodeEntity間の関係を永続化する方法
最初のpersist()を削除すると、以下のテストは失敗します。セットをインスタンス化するためにNodeEntityを永続化する必要があるのはなぜですか?これを行うためのより良い方法はありますか?必要以上に頻繁にデータベースに書き込む必要はありません。
上記の行を削除すると、次の例外が発生します。
スロー
Competence.class:
Education.class
spring - spring-data-neo4jでWrappingNeoServerBootstrapperを使用します
WrappingNeoServerBootstrapper
spring-data-neo4jでを使用することは可能ですか?
spring-data-neo4jなしで組み込みデータベースを使用する場合、aを使用しWrappingNeoServerBootstrapper
てRESTインターフェースとWebadminを有効にすることができます。spring-data-neo4jと組み込みdb(<neo4j:config storeDirectory="target/graph.db"/>
Springコンテキスト)を使用しており、webadminとrest-interfaceを使用したいと思います。
これを達成する方法はありますか?
また、spring-data-neo4j-restがトランザクションを処理するかどうか疑問に思っていますか?
spring - SDG 2.0で注釈を取得し、戦略の質問を取得する
春のデータグラフを使用しているすべての患者開発者の皆さん、こんにちは。ドキュメントが非常に少なく、テストカバレッジがかなり不十分なため、フレームワークがどのように機能するかを理解するのが非常に難しい場合があります。現在、SDG1.1で導入された新しいフェッチングアプローチに関連するいくつかの質問があります。SDG 1.1のライトスルーとは対照的に、2.0では@Fetchアノテーションが付けられたリレーションと関連オブジェクトのみが熱心にフェッチされ、他のオブジェクトは怠惰にフェッチされることになっています..そして今私の最初の質問:
- エンティティのロードとレイジーリレーションでのゲッターの呼び出しが同じトランザクションで行われる場合、要求されたコレクションが自動的にフェッチされるようにSDGを構成することは可能ですか?トランザクションスコープ内の永続コンテキストの種類、または機能リリースで計画されている可能性があります。
- @RelatedToアノテーションのレイジーコレクションを一度にフェッチするにはどうすればよいですか?Neo4jOperationからのfetch()メソッドでは、1つのエンティティのみをフェッチできます。リスト全体を反復処理して、各オブジェクトのエンティティをフェッチする必要がありますか?指定されたオブジェクトがすでにフェッチ/初期化されているかどうかを確認するための最良の方法は何でしょうか?
- 提案として、初期化されていないオブジェクトを操作するときにNPEを取得する代わりに、一種の遅延読み込み例外がスローされると、より直感的になると思います。さらに、オブジェクトが初期化されておらず、idを除くすべてのメンバープロパティがnullの場合、equalsメソッドは初期化されていないさまざまなオブジェクトにtrueを提供できるため、動作は誤解を招きます。これは、たとえばセットのアプライアンスを考えると非常に深刻な問題です。
SDG 2.0.0.RC1で作業しているときに気付いた別の問題は、次のとおりです。フェッチされていないコレクションに新しいオブジェクトを追加すると、適切に追加されて永続化される場合がありますが、そうでない場合もあります。このケースのテストを作成しましたが、非決定論的な方法で機能します。失敗することもあれば、成功することもあります。ユースケースは次のとおりです。
/li>
このテストは、最後のアサートで失敗する場合があります。つまり、メンバーがセットに追加される場合と追加されない場合があります。問題はManagedFieldAccessorSetのどこかにあると思いますが、これは決定論的ではないため、言うのは難しいです。mvn2とmvn3を使用してjava1.6_22と1.6_27でテストを実行すると、常に同じ結果が得られました。テストが失敗する場合もあります。Userequalsの実装は次のようになります。
--@ Fetchで注釈が付けられたオブジェクトにはシリアル化可能なjavaHashSetが使用され、遅延ロードされたフィールドにはシリアル化不可能でシリアル化不可能な例外が発生するManagedFieldAccessorSetが使用されることも少し問題があります。
ヘルプやアドバイスは大歓迎です。前もって感謝します!
java - (spring-data-)neo4j データベースからすべての関係を取得するにはどうすればよいですか?
@RelationshipEntity
spring-data-neo4j [SDN] データベースから特定のタイプ (タイプは注釈付きクラス) のすべての関係を簡単に取得する方法はありますか? (2.0.0.RC1 および組み込み DB での作業)
SDN が提供する方法を試すと、次のようになります。
次のエラーが表示されます。
org.neo4j.graphdb.NotFoundException: __type__ property not found for RelationshipImpl #9672 of type 7 between Node[4844] and Node[4875].
完全なスタック トレース: http://pastebin.com/j2gqcjxh (ただし、
解決策は、低レベル (neo4j) API (すなわちGraphDatabaseService
) を使用してすべてのノードを取得し、ノードごとにすべての関係を取得し、それらの__type__
フィールドが関心のある関係のタイプと一致するかどうかを確認することです。findAll
関係の方法?
簡単な説明は、推奨されるインターフェースはノードとリレーションシップで同じであるということですが、リレーションシップに使用することは許可されていないというドキュメントはありfindAll
ますか?
または: データベースで関係エンティティを調べると、例外と矛盾します。これは、タイプが期待どおりに正しく定義されており、ノードを取得して呼び出すと、高レベル (SDN) API を介して関係を取得できるためです。getRelationship*(..)
ImpermanentDataGraph
他の注記:サービスが v 2+ に含まれるかどうか誰か知っていますか?
spring - Spring Data Neo4j の単純なオブジェクト/グラフ マッピングを使用してトランザクションを取得する正しい方法は?
私は、Spring Data Neo4j 2.0 で単純なオブジェクト/グラフ マッピングを使用しています。ここでは、Spring Data リポジトリ フレームワークを使用して永続化操作を実行しています。Neo4jTemplate を使用するのではなく、リポジトリを使用しています。リポジトリを Spring Web MVC コントローラーに挿入すると、コントローラーはリポジトリを直接呼び出します。(中間サービス層はありません。私の操作は通常、CRUD とファインダー クエリです。)
読み取り操作を行う場合、問題はありません。しかし、書き込み操作を行うと、「NotInTransactionException」が発生します。私の理解では、Neo4j の読み取り操作はトランザクションを必要としませんが、書き込み操作は必要です。
単純な OGM に固執したい場合、ここで取引を把握するための最良の方法は何ですか? @Transactional を使用したいのですが、それをさまざまなリポジトリ インターフェイスに配置してもうまくいきません。コントローラーとリポジトリーの間に中間サービス層を導入し、サービス Bean に @Transactional のアノテーションを付けるとうまくいきますが、もっと簡単な方法はないかと考えています。Spring Data がなければ、通常は DAO (リポジトリ) 実装にアクセスできるため、パススルー サービス層を回避したい場合は、具体的な DAO に @Transactional でアノテーションを付けることができます。Spring Data では、リポジトリが動的に生成されるため、それはオプションではないようです。
neo4j - Neo4j/Spring-Dataでの遅延/熱心な読み込み/フェッチ
私は簡単なセットアップをしていて、不可解な(少なくとも私にとっては)問題に遭遇しました:
互いに関連する3つのpojoがあります。
したがって、「現在のユニット」に直接ジャンプできるユーザーをマークする「現在のユニット」を持つUser-Worker-Unitがあります。各ユーザーは複数のワーカーを持つことができますが、1つのワーカーは1つのユニットにのみ割り当てられます(1つのユニットは複数のワーカーを持つことができます)。
私が疑問に思っていたのは、「User.worker」の@Fetchアノテーションを制御する方法です。私はほとんどの場合「Worker」でしか作業しないので、実際には必要なときにだけこれをロードしたいと思っています。
http://static.springsource.org/spring-data/data-neo4j/docs/2.0.0.RELEASE/reference/html/を確認しましたが、はっきりしていません。
- ワーカーは読み取り専用(着信関係)である必要があるため、反復可能です。ドキュメントではこれが明確に示されていますが、例では「セット」がほとんどの場合に使用されます。なんで?またはそれは重要ではありません...
- ワーカーにアクセス時にのみロードさせるにはどうすればよいですか?(遅延読み込み)
- 単純な関係(worker.unit)でさえ@Fetchでアノテーションを付ける必要があるのはなぜですか。もっと良い方法はありませんか?このような単純な関係が多数ある別のエンティティがあります。1つのオブジェクトのプロパティが必要であるという理由だけで、グラフ全体をロードする必要はありません。
- 遅延読み込みで動作するように、スプリング構成が欠落していますか?
- 追加の呼び出しを介して関係(@Fetchとしてマークされていない)をロードする方法はありますか?
私の見方からすると、このコンストラクトは、ほとんどの場合ユーザーを気にしない場合でも、ワーカーが必要になるとすぐにデータベース全体をロードします。
私が見つけた唯一の回避策は、リポジトリを使用し、必要に応じてエンティティを手動でロードすることです。
- - - - アップデート - - - -
私はかなり前からneo4jを使用していて、フェッチを常に呼び出す必要がない(したがって、グラフ全体をロードしない)上記の問題の解決策を見つけました。唯一の欠点:それは実行時の側面です:
アスペクトを適用するクラスパスmy.model.packageを調整する必要があります。.get()) ")
モデルクラスのすべてのgetメソッドにアスペクトを適用します。これには、いくつかの前提条件が必要です。
- モデルクラスでゲッターを使用する必要があります(アスペクトはパブリック属性では機能しません-とにかく使用しないでください)
- すべてのモデルクラスは同じパッケージに含まれています(コードを少し調整する必要があります)-フィルターを調整できると思います
- ランタイムコンポーネントとしてのaspectjが必要です(tomcatを使用する場合は少し注意が必要です)-しかし、それは機能します:)
すべてのモデルクラスは、以下を提供するBaseObjectインターフェイスを実装する必要があります。
public interface BaseObject {public boolean isFetched(); }
これにより、ダブルフェッチが防止されます。必須のサブクラスまたは属性(つまり、名前またはnodeId以外のもの)をチェックして、実際にフェッチされているかどうかを確認します。Neo4jはオブジェクトを作成しますが、nodeIdを埋めるだけで、他のすべては変更されません(したがって、他のすべてはNULLになります)。
すなわち
誰かがその奇妙な回避策なしでこれを行う方法を見つけた場合は、あなたの解決策を追加してください:)これは機能するので、私はaspectjのないものが大好きです。
カスタムフィールドチェックを必要としないベースオブジェクトデザイン
最適化の1つは、ブールフィールド(ブールロード)を実際に使用してそれをチェックするインターフェイスの代わりに基本クラスを作成することです(手動チェックについて心配する必要はありません)。
これが機能するのは、オブジェクトを保存すると、ロード時に「true」が返されるためです。アスペクトがオブジェクトを見るとき、isFetched()を使用します。これは、オブジェクトがまだ取得されていない場合、nullを返します。オブジェクトが取得されると、setLoadedが呼び出され、ロードされた変数がtrueに設定されます。
ジャクソンが遅延読み込みをトリガーするのを防ぐ方法は?
(コメントの質問への回答として-この問題がなかったので、まだ試していなかったことに注意してください)。
jacksonでは、カスタムシリアライザーを使用することをお勧めします(つまり、http: //www.baeldung.com/jackson-custom-serializationを参照)。これにより、値を取得する前にエンティティを確認できます。すでにフェッチされているかどうかをチェックし、シリアル化全体を続行するか、IDを使用するだけです。
スプリング構成
これは私が使用しているSpring構成のサンプルです。プロジェクトに合わせてパッケージを調整する必要があります。
AOP構成
これは、これが機能するための/META-INF/aop.xmlです。
data-modeling - データモデルのオンラインツールを見つける...写真から
Spring Data Neo4j のドキュメントを読んだところ、次のような写真が見つかりました。
とても面白いので私も使ってみたいです!それを生成するウェブサイトが何であるか知っていますか?いくつかのスクリプト言語で動作することは知っていますが、数時間かけても見つかりませんでした:(
java - spring-data-graphhello-worldsの例を作成できません
私はMavenが初めてで、spring-data-neo4jも初めてです。このhello-worlds-exampleをダウンロードしました
次のコマンドを使用して、mavenで説明されているような例を実行しようとしました。
たくさんの間違いになりました。問題を理解しても問題を解決する方法が見つかりません。
私のMavenは正しくインストールされています:
ご協力いただきありがとうございます。
編集(jdk1.6と同じ):
と:
jakarta-ee - RelationshipEntity ごとに異なるタイプ
このタイプのモデリングを Spring Data Neo4j で表現したいと思います。
... どこObject
とProperty
はNodeEntity
で、 どこValue
はRelationshipEntity
です。
例えば:
これらすべてのプロパティを車のノードに直接配置できる可能性があることはわかっています。しかし、将来的には、このモデリングを代わりにグラフ トラバーサルの最適化に使用したいと考えています。次のようになります。
value
問題は、プロパティに使用する必要がある型がわからないことです。Spring Data Neo4j でそれを行う可能性はありますか?
ありがとうございました。