Clojure tempid编号与final:tempid hashmap的关系如何?

Clojure tempid编号与final:tempid hashmap的关系如何?,clojure,datomic,Clojure,Datomic,如果我想将一条记录粘贴到datomic中: i、 e 我得到一张地图: {: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

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

i、 e

我得到一张地图:

{: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}}
tempid的键为-9223350047848912453

现在。。。。这些地图是如何相互映射的

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

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

:

从-1到-1000000(含)的n值保留给 用户创建的临时ID


(您的临时ID太小。)

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

大致如下:

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

否则,关系是有序的(第一个与第一个、第二个与第二个等)。

因此,如果不能将tempid映射回原始tempid,那么拥有tempid映射又有什么意义呢?可以,但在本例中不是,因为您的tempid首先是无效的。用户创建的tempid是什么意思?我以为这就是我要做的是的,但是你指定的超出了范围(低于-1000000)。
(defn transact!
  [conn tx]
  (let [{eids :tempids} @(d/transact conn tx)]
        (map #(d/resolve-tempid (d/db conn)
                                eids
                                (:db/id %)) tx)))