我正在阅读关于Clojure Web堆栈的网站:
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)))
这个概念有没有什么自动化的方式,或者说这已经是最好的了吗?