1

neo4j-ogm で見られた奇妙な動作について、ようやく説明がついたような気がします。当初、equals/hashcode の実装に関係があると考えていましたが、そうではありません。

ogm はキャッシュされたグラフのコピーを保持しているようで、トランザクション内ではすべての取得が同じメモリ オブジェクトを指しています。

動作を実証するための単体テストを作成しました (機能しない疑似コードの一部を以下に示します)。

//all within the same transactional


//retrieve an object from the database

NodeObject no1 = repository.loadObject();


//update some values on the object

no1.setValue("whatever");


//retrieve the same database object into a new java object

NodeObject no2 = repository.loadObject();


//at this point no2 and no1 are the same java object, and any value changes to no1 have been reverted to no2, as is in the database.

これは私たちにとって問題のように見える特殊性です。

以前にこれを確認し、取得したオブジェクトの深さを変更して (グラフがメモリ内のものを元に戻さないようにするために) 排除しましたが、サイファー クエリを使用していない場合はカスタマイズできません。

この問題を回避する方法を教えてください。

4

1 に答える 1

0

その「キャッシュ」のスコープを Bean 構成またはセッション構成で構成できます。必要な場合は、要求によって、http-session またはアプリケーション スコープ (永久) によって構成できます。

参照: http://docs.spring.io/spring-data/neo4j/docs/4.0.0.RELEASE/reference/html/#_session_bean

于 2015-10-07T18:07:51.013 に答える