You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Datomic本地版事务仅生成时间戳,无法写入用户数据求助

Datomic本地事务仅生成时间戳,无实际数据写入问题

环境信息

  • Datomic客户端依赖:com.datomic/local {:mvn/version "1.0.285"}
  • Clojure版本:org.clojure/clojure {:mvn/version "1.11.1"}
  • API导入:[datomic.client.api :as d]

问题描述

事务看似执行成功,但仅生成事务时间戳datom,无用户数据写入数据库。已确认Schema存在且配置正确。

最小测试用例

(defn check-schema [conn]
  (let [user-id-schema (d/q '[:find (pull ?e [*])
                             :where [?e :db/ident :user/id]]
                           (d/db conn))
        user-email-schema (d/q '[:find (pull ?e [*])
                                :where [?e :db/ident :user/email]]
                              (d/db conn))
        user-token-schema (d/q '[:find (pull ?e [*])
                                :where [?e :db/ident :user/verification-token]]
                              (d/db conn))]
    {:user/id user-id-schema
     :user/email user-email-schema
     :user/verification-token user-token-schema}))

(deftest user-creation
  (testing "user-creation"
    (println "Schema check:" (check-schema conn))
    (let [user-id (random-uuid)
          email "some@email.com"
          token "123456"
          res (d/transact conn [{:user/id user-id
                                :user/email email
                                :user/verification-token token}])
          db-after (d/db conn)
          users (d/q '[:find ?e ?email
                      :where [?e :user/email ?email]]
                    db-after)]
      (println "Transaction tx-data:" (seq (:tx-data res)))
      (println "Database after transaction:" db-after)
      (println "Found users:" users)
      (is (not (empty? users))))))

Datomic配置

{:datomic-client {:server-type :datomic-local
                  :system "test"}}

Schema检查结果

#:user{:id [[#:db{:id 115, :ident :user/id, 
                  :valueType #:db{:id 54, :ident :db.type/uuid}, 
                  :cardinality #:db{:id 35, :ident :db.cardinality/one}, 
                  :unique #:db{:id 37, :ident :db.unique/value}}]], 
       :email [[#:db{:id 119, :ident :user/email, 
                    :valueType #:db{:id 23, :ident :db.type/string}, 
                    :cardinality #:db{:id 35, :ident :db.cardinality/one}, 
                    :unique #:db{:id 37, :ident :db.unique/value}}]], 
       :verification-token [[#:db{:id 120, :ident :user/verification-token, 
                                :valueType #:db{:id 23, :ident :db.type/string}, 
                                :cardinality #:db{:id 35, :ident :db.cardinality/one}, 
                                :unique #:db{:id 37, :ident :db.unique/value}}]]}

事务执行现象

  • 事务返回成功,但tx-data仅包含时间戳datom:(#datom[13194139533331 50 #inst "2024-11-27T09:50:52.123-00:00" 13194139533331 true])
  • 无用户相关数据写入数据库
  • 查询返回空结果

已尝试的解决方法

  • 使用不同实体ID方式(tempid、UUID、字符串标识符)
  • 尝试不同事务格式(map形式、:db/add显式形式)
  • 多次验证Schema已正确安装
  • 尝试写入事务实体本身
  • 使用数值型tempid
  • 创建基础属性的写入测试

疑问

确认Schema已正确安装且可见,但实际数据写入始终失败,仅记录事务时间戳。请问遗漏了什么?为何事务除时间戳外不生成任何datom?


内容的提问来源于stack exchange,提问作者timeyyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 23:13:11