我正在阅读有关 clojure 网络堆栈的网站:
http://brehaut.net/blog/2011/ring_introduction
它对 clojure 的 ORM 有这样的说法:
“出于显而易见的原因,没有用于 Clojure 的 SQL/关系数据库 ORM。”
我可以看到的明显原因是,当您执行 clojure.contrib.sql 或 clojureql 查询时,对象的映射会自动发生。然而,似乎需要一些额外的工作来完成一对多或多对多的关系(尽管可能不需要太多的工作)。
我发现这篇文章是一对多的:http: //briancarper.net/blog/493/
我不确定我是否同意;它似乎假设两个表都是从数据库中提取的,然后在内存中过滤连接的表。在实践中,我认为 sql 查询将指定 where 条件。
所以我想知道,是否有一些相当明显的方法可以通过 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)))
有什么方法可以使这个概念自动化,或者这是否尽可能好?