clojure – 获取插入的实体的ID在数据库?

数据库中运行一个事务来插入一个值后,我如何使用事务的返回值来获取创建的任何实体的id?

以下是插入后获得的返回值的示例:

#<promise$settable_future$reify__4841@7c92b2e9: {:db-before datomic.db.Db@62d0401f,:db-after datomic.db.Db@bba61dfc,:tx-data [#Datum{:e 13194139534331 :a 50 
:v #inst "2013-06-19T11:38:08.025-00:00" 
:tx 13194139534331 :added true} #Datum{:e 17592186045436 .....

我可以看到底层基准…如何提取它们的值?

解决方法

使用 d/resolve-tempid.如果要处理单个实体,请查看:tx-data将工作,但如果您的事务包含多个实体,则不会知道它们出现在以下位置的顺序:tx-data.

您应该使用(d / tempid)或其文字表示#db / id [:db.part / user _negativeId_]向您的实体提供临时ID(在处理之前),然后使用d / resolve-tempid从你的临时id到数据库给出的实际id.代码看起来像:

(d/resolve-tempid (d/db conn) (:tempids tx) (d/tempid :db.part/user _negativeId_))

有关完整代码示例,请参阅此gist.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...