У меня есть тип пользовательского объекта в базе данных Datomic, который может следовать за другими типами пользователей. Моя проблема возникает, когда один пользователь следует другому пользователю, который уже следующий их:Сериализация рекурсивных ссылок в Datomic
User A follows user B and also User B follows user A
Когда я пытаюсь сериализации (используя Чешир) Я получаю StackOverflowError из-за (я предполагаю, что) зацикливание на атрибут :user/follows-users
.
Как бы я стал сериализовать (для json для API) два объекта Datomic, которые ссылаются друг на друга таким образом?
Вот основная схема:
; schema
[{:db/id #db/id[:db.part/db]
:db/ident :user/username
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/unique :db.unique/identity
:db.install/_attribute :db.part/db}
{:db/id #db/id[:db.part/db]
:db/ident :user/follows-users
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
:db.install/_attribute :db.part/db}
; create users
{:db/id #db/id[:db.part/user -100000]
:user/username "Cheech"}
{:db/id #db/id[:db.part/user -200000]
:user/username "Chong"}
; create follow relationships
{:db/id #db/id[:db.part/user -100000]
:user/follows-users #db/id[:db.part/user -200000]}
{:db/id #db/id[:db.part/user -200000]
:user/follows-users #db/id[:db.part/user -100000]}]
И когда база данных созданы и т.д. на РЕПЛ:
user=> (use '[cheshire.core :refer :all])
nil
user=> (generate-string (d/touch (d/entity (d/db conn) [:user/username "Cheech"])))
StackOverflowError clojure.lang.RestFn.invoke (RestFn.java:433)