验证 Datomic 实体 ID 是否有效

Ral*_*lph 2 scala datomic datomisca

如何验证 Datomic 实体 ID 是否有效?

我正在使用 Scala 和 Datomisca,但任何测试可能也适用于 Clojure 和 Datomic。

我正在考虑使用

connection.database.entity(id).toMap.nonEmpty
Run Code Online (Sandbox Code Playgroud)

假设一个有效的实体至少有一个属性。

有没有更好、更安全的方法来做到这一点?

Rod*_*ada 5

根据Datomic 文档中的这一部分:

实体不适合存在测试,通常应通过查找唯一身份来执行存在测试。

使用这样的东西可能更好(在 Clojure 中):

(d/q '[:find ?a
       :in $ ?entid
       :where [?entid ?a]]
     db
     id)
Run Code Online (Sandbox Code Playgroud)

如果没有与 id 相关的属性,这将返回一个空集。您可以创建一个谓词函数来抽象此查询:

(defn valid-id? [db id]
  ((comp not empty?) (d/q '[:find ?a
                            :in $ ?entid
                            :where [?entid ?a]]
                          db
                          id)))
Run Code Online (Sandbox Code Playgroud)

我很抱歉用 Clojure 编写示例,但我不了解 Datomisca。