我创建了一个具有 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
)
;;--- #{}
也许我在表达值(value)的方式上遗漏了一些东西。对属性 :home/area 使用不同的值(如 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 version: "0.9.5390" java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode) MySQL as Storage service
预先感谢您的任何建议。
最佳答案
对于 Clojure 用户来说,名称 :db.type/bigint
可能会产生误导,因为 it actually maps 是 java.math.BigInteger
,而不是 clojure.lang。 BigInt
.
我重现了相同的步骤,但我无法告诉您为什么数据记录查询在 123456789000000N
上失败,但在 100N
和 1111111111111111111111111111111111111N
上失败。然而,以下方法似乎总是有效:
(d/q '[
:find ?e
:in $ ?h
:where
[?e :home/area ?h]]
(d/db (d/connect uri2))
(.toBigInteger 100N)
)
关于datomic - 使用 bigint 属性查询某些值返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907972/