在事务中包装返回值

时间:2013-02-13 17:09:34

标签: clojure

在我看来,我想要实现的目标是微不足道的;尽管如此,我还是有些头疼自己想出来。

我有一个用Clojure编写的服务实现,它通过JPA与数据库后端通信。 我必须做这样的事情:

(defn foo []
  (let [entitymanager ... query ...]
    (do
      (.. entitymanager (getTransaction) (begin))
      (read-from-db query) ; <-- shall be returned
      (.. entitymanager (getTransaction) (commit))
      )
    )
  )

使用 read-from-db 返回值。我查看了 java.jdbc 包,看起来很有希望,但我想/必须坚持使用JPA。此外,我的问题似乎并非针对JPA persé。

在Clojure中有没有一种惯用的方法来包装返回值? 请记住我是Clojure新手。

亲切的问候!

1 个答案:

答案 0 :(得分:3)

我不确定你理解你的问题。以下是我猜你的问题的答案:

(defn foo []
  (let [entitymanager ... query ...]
    (do
      (.. entitymanager (getTransaction) (begin))
      (let [db-reply (read-from-db query)] ; <-- shall be returned
        (.. entitymanager (getTransaction) (commit))
        db-reply)
      )
    )
  )

正确?