Я читал этот сайт о веб-стеке clojure:
http://brehaut.net/blog/2011/ring_introduction
и это говорит об ORM для clojure:
"Для очевидных причин нет ORM-модулей SQL/Relational DB для clojure.
Очевидная причина, по которой я вижу, заключается в том, что сопоставление объекта происходит автоматически, когда вы выполняете запрос clojure.contrib.sql или clojureql. Однако кажется, что для выполнения отношений "один-ко-многим" или "ко многим" требуется некоторая дополнительная работа (хотя, возможно, и не слишком много работы).
Я нашел эту запись для одного-ко-многим: http://briancarper.net/blog/493/
Я не уверен, с чем согласен; предполагается, что обе таблицы извлекаются из базы данных, а затем объединенная таблица фильтруется в памяти. На практике я думаю, что sql-запрос будет определять критерии.
Итак, мне осталось интересно, есть ли довольно очевидный способ автоматически делать отношения "один ко многим" через clojureql или clojure.contrib.sql? Единственное, что я могу придумать, это что-то вроде этого (с использованием типичного примера блога/комментария):
(defn post [id]
@(-> (table :posts)
(select (where :id id))))
(defn comments [post_id]
@(-> (table :comments)
(select (where :post_id post_id))))
(defn post-and-comments [id]
(assoc (post id) :comments (comments id)))
Есть ли способ автоматизировать это понятие или это так хорошо, как оно получается?