bigint型の属性を持つ最小限のエンティティを作成しましたが、問題は特定の値に対してクエリが失敗することです。これはスキーマです:bigint属性を使用したクエリ特定の値に対して空の戻り値
[{:db/ident :home/area,
:db/valueType :db.type/bigint,
:db/cardinality :db.cardinality/one,
:db/doc "the doc",
:db.install/_attribute :db.part/db,
:db/id #db/id[:db.part/db -1000013]}]
私はサンプル値を挿入:
(d/transact (d/connect uri2)
[{
:db/id #db/id[:db.part/user]
:home/area 123456789000000N}
])
をし、それがdatomicコンソールを使用して作成されたことを確認しました。次のクエリは、以前に挿入されたエンティティを期待通りに返しません。
(d/q '[
:find ?e
:in $ ?h
:where
[?e :home/area ?h]]
(d/db (d/connect uri2))
123456789000000N
)
;;--- #{}
多分値が表現される方法で何かが失われています。属性に100Nのような別の値を使用して別のテスト:
(d/transact (d/connect uri2)
[{
:db/id #db/id[:db.part/user]
:home/area 100N}
])
(d/q '[
:find ?e
:in $ ?h
:where
[?e :home/area ?h]]
(d/db (d/connect uri2))
100N
)
;;-- #{[17592186045451]}
はまた私に混乱している値111111111111111111111111111111111111Nで正常に動作します:ホーム/面積は正しい答えを返します。
Datomic版: "0.9.5390" Javaのバージョン "1.8.0_05" Javaの(TM)SE ランタイム環境(1.8.0_05-B13を構築する)は、Java HotSpot(TM)64ビット サーバーVM(ビルド25.5-b02、mixed mode)ストレージサービスとしてのMySQL
ご意見ありがとうございます。
私はあなたの提案(.toBigIntegerメソッドを使用)の後に3つの例を変更し、すべて正常に動作します。確かに、クエリバインディング中の値と関連しています。その背後にある理由を引き続き検索しますが、この回避策をプロジェクトに使用できます。ありがとうValentin –