验证Datomic实体ID是否有效

时间:2015-02-05 13:47:17

标签: scala datomic datomisca

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

我正在使用Scala和Datomisca,但任何测试都应该适用于Clojure和Datomic。

我正在考虑使用

connection.database.entity(id).toMap.nonEmpty

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

有更好,更安全的方法吗?

1 个答案:

答案 0 :(得分:3)

根据Datomic docs中的this section

  

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

最好使用这样的东西(在Clojure中):

(d/q '[:find ?a
       :in $ ?entid
       :where [?entid ?a]]
     db
     id)

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

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

我很抱歉在Clojure中写了这些例子,但我不知道Datomisca。