3

よりも組み込みDBは異なるサイファークエリー戻り値の型を数えるには、我々は、カウントCYPHERクエリが使用されている私たちのコードをテストすることによって、問題を発見しました。テストは(EmbeddedDriver)結果の型内に返された値が長い組み込みデータベースに対して実行されている場合(または整数、私が覚えている」いけない)と同じテストがリモート・データベースに対して実行されている(HttpDriver)返された値内結果の型はInteger(またはlong;)です。春データのNeo4j(4.2.0M1)リモート1

これは、ユニットテストケースでIntegerを返し、リモートデータベースに対してコードが「本番モード」で使用されているときにClassCastExceptionを持つと思ってコードを実装できないことを意味します。

現在の回避策が正常に返された値をキャストするのinstanceofを使用しているが、それは本当にパフォーマンスではなく、かなり...。ここ

は、これらのクエリのいずれかの例です:

Object result = neo4jSession.query("MATCH (n) RETURN count(n) as result", 
        ...).iterator().next().get("result"); 

Long value = result instanceof Long ? (Long) result : new Long((Integer) result); 

バグですか?

答えて

1

質問は、種々の形態(例えばthis one又はthat oneを参照)たまにアップ作物。

その後、あなただけ行うことができ、Numberよりも多くの特定のタイプを想定していないのが最善です:

long value = ((Number) result).longValue(); 

ノーinstanceof、ないオブジェクトの作成を。

+0

私は回避策に同意しないが、実際には、DBの2種類は、それが長いか、int型であるかどうか、同じJava型... – Oizo

+0

を返されていないそのバグが特にオーバー値に依存するかどうかを知ることが多いですタイプが明白でないneo rest api。 OGMは、常にそれがカスタムクエリでこれらの数字は何を表しているか理解していないとして、特定のデータ型に番号を変換しようとすることはありません。それがFrankの記述どおりにNumberとして扱うことが推奨される方法です – Luanne

関連する問題