提问人:adham327 提问时间:10/3/2023 最后编辑:adham327 更新时间:10/16/2023 访问量:68
为什么 :d b.type/uri 的值返回为 com.cognitect.transit.impl.URIImpl?
Why do values of :db.type/uri return as com.cognitect.transit.impl.URIImpl?
问:
我正在使用 Datomic Cloud,我注意到以下情况,每当我处理该类型的事实并尝试查询它时,我都会返回该类型,我希望类型保持不变。我没有找到关于这个问题或如何处理它的文档。java.net.URI
com.cognitect.transit.impl.URIImpl
这破坏了我使用互操作来获取 URI 主机的行为。由于 Clojure 将抛出一个异常。No matching field found: getHost for class com.cognitect.transit.impl.URIImpl
在 local-dev 中不会发生此问题。
例:
(require '[datomic.client.api :as d])
(def schema [{:db/ident :test/url
:db/valueType :db.type/uri
:db/unique :db.unique/identity
:db/cardinality :db.cardinality/one
:db/doc "The URL."}])
(def cfg {:server-type :cloud
:region ""
:system ""
:endpoint ""})
(def client (d/client cfg))
(d/create-database client {:db-name "test"})
(def conn (d/connect client {:db-name "test"}))
(d/transact conn {:tx-data schema})
(d/transact conn {:tx-data [{:test/url (java.net.URI. "https://www.google.com")}]})
(let [q '[:find ?url
:where [?e :test/url ?url]]
db (d/db conn)]
(d/q q db))
;; => [[#object[com.cognitect.transit.impl.URIImpl 0x938b85 "https://www.google.com"]]]
(let [q '[:find ?url
:where [?e :test/url ?url]]
db (d/db conn)]
(type (ffirst (d/q q db))))
;; => com.cognitect.transit.impl.URIImpl
(let [q '[:find ?url
:where [?e :test/url ?url]]
db (d/db conn)]
(.getHost (ffirst (d/q q db))))
;; => Unhandled java.lang.IllegalArgumentException
;; No matching field found: getHost for class com.cognitect.transit.impl.URIImpl
我期待作为类型。java.net.URI
更新:Datomic Support 的 Jaret Binford 澄清说,这是 Datomic 端的一个潜在错误。一旦得到进一步的澄清,我将更新这个问题。
更新:来自 Datomic Support 的 Jaret Binford 确认这是 Datomic 端的一个错误。
答: 暂无答案
评论