Je lisais ce site sur la pile web Clojure :
http://brehaut.net/blog/2011/ring_introduction
et il a ceci à dire sur ORM pour clojure :
"Pour des raisons évidentes, il n'y a pas d'ORM SQL/base de données relationnelle pour Clojure."
La raison évidente que je vois est que le mappage en objet se fait automatiquement lorsque vous faites une requête clojure.contrib.sql ou clojureql. Cependant, il semble qu'un peu de travail supplémentaire soit nécessaire pour faire des relations un-à-plusieurs ou plusieurs-à-plusieurs (bien que peut-être pas trop de travail).
J'ai trouvé ce texte sur le one-to-many : http://briancarper.net/blog/493/
Je ne suis pas sûr d'être d'accord avec cela ; cela semble supposer que les deux tables sont extraites de la base de données et que la table jointe est filtrée en mémoire. En pratique, je pense que la requête SQL devrait spécifier le critère "where".
Je me demande donc s'il existe un moyen assez évident de créer automatiquement des relations de type "un vers plusieurs" via clojureql ou clojure.contrib.sql ? La seule chose à laquelle je peux penser est quelque chose comme ceci (en utilisant l'exemple typique d'un billet de blog/commentaire) :
(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)))
Y a-t-il un moyen d'automatiser ce concept ou est-ce aussi bon qu'il l'est ?