tempid数字与final:tempid hashmap有什么关系?

时间:2014-10-28 05:44:04

标签: clojure datomic

如果我想将记录粘贴到datomic:

{:db/id #db/id[:db.part/user -1226692165], :address/country "Australia"}

我得到了一张地图:

{:db-before #db{1000 #inst "2014-10-28T05:39:40.413-00:00"},
 :db-after #db{1001 #inst "2014-10-28T05:39:53.626-00:00"},
 :tx-data [#datom[13194139534313 50 #inst "2014-10-28T05:39:53.626-00:00" 13194139534313 true]
           #datom[17592186045418 67 "Australia" 13194139534313 true]],
 :tempids {-9223350047848912453 17592186045418}}

-9223350047848912453是tempid的关键

现在......这些如何相互映射?

 #db/id[:db.part/user -1226692165] <=> -9223350047848912453

2 个答案:

答案 0 :(得分:0)

他们没有。这是未定义的行为。

http://docs.datomic.com/clojure/#datomic.api/tempid

  

保留的值为-1到-1000000(包括-1和-1000000)   用户创建的tempids。

(你的性感太小了。)

答案 1 :(得分:0)

您可以使用resolve-tempid函数将临时ID映射到实体ID。

这些方面的东西:

(defn transact!
  [conn tx]
  (let [{eids :tempids} @(d/transact conn tx)]
        (map #(d/resolve-tempid (d/db conn)
                                eids
                                (:db/id %)) tx)))

否则该关系是有序的(首先是第一个,第二个是第二个,等等)