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
相关产品推荐
相关产品推荐

