2016-04-01 2 views
0

У меня есть следующая функция Clojure, которая осуществляет операции на Datomic базе:В чем разница между указанным пользователем параметром temp-id транзакции и возвратом транзакции в Datomic?

(defn demo-tran [term description] 
(d/transact conn 
      [{:db/id (d/tempid :db.part/utility -10034) 
      :utility.tag/uuid (d/squuid) 
      :utility.tag/term term 
      :utility.tag/description description}])) 

Затем я запустить это в РЕПЛ:

(demo-tran "Moo" "A bovine beast") 

Это преуспевает и дал мне обратно «карта сделки»:

{:db-before datomic.db.Db, 
@f4c9aa60 :db-after, 
datomic.db.Db @908ec69f, 
:tx-data [#datom[13194139534424 50 #inst"2016-04-01T09:16:50.945-00:00" 13194139534424 true] 
     #datom[668503069688921 153 #uuid"56fe3c82-8dbd-4a0d-9f62-27b570cbb14c" 13194139534424 true] 
     #datom[668503069688921 154 "Moo" 13194139534424 true] 
     #datom[668503069688921 155 "A bovine beast" 13194139534424 true]], 
:tempids {-9222699135738586930 668503069688921}} 

Я уточнил tempid для этой операции, как «-10034», так что я бы ожидать, чтобы найти, что отрицательное число в: карте tempids. Вместо этого я нахожу -9222699135738586930. Это смущает. Что здесь происходит?

Я надеялся, что функция demo-tran вернет новый EntityID, но (кроме угадывания позиции в карте tempids), нет способа, учитывая мои входы, чтобы получить это значение.

+0

Вы можете взглянуть на http://stackoverflow.com/a/17192764/597473. –

ответ

1

Как упоминает один комментатор (по ссылке), вам необходимо использовать resolve-tempid, как указано в документе here и продемонстрировано в день проектного задания here.

В вашем случае это будет что-то вроде:

(let [my-tempid (d/tempid :db.part/utility -100034) 
     tx-result @(d/transact conn [{:db/id my-tempid 
            :your "transaction"}]) 
     db-after (:db-after tx-result) 
     tempids (:tempids tx-result)] 
    (d/resolve-tempid db-after tempids my-tempid)) 
Смежные вопросы