2010-11-25 63 views
0

我正在使用clj-record/transaction两个包装两个记录创建。错误时,我使用clojure.contrib.condition/raise来引发异常,但这不会回滚任何内容。有任何想法吗?回滚clj记录事务

+0

我要指出,我在一个应用程序错误,不参照完整性问题引发异常。 – edoloughlin 2010-11-26 00:09:42

回答

1

我需要使用clojure.contrib.sql /设置为只回滚:

(ns my.namespace.txtest 
    (:use clojure.contrib.condition) 
    (:require clj-record.boot 
    [clj-record.callbacks.built-ins  :as cb] 
    [clj-record.core     :as rec] 
    [clj-record.validation.built-ins :as valid] 
    [clojure.contrib.sql    :as sql])) 

(def db {:classname "com.mysql.jdbc.Driver" 
    :subprotocol "mysql" 
    :user "mydb" 
    :password "password" 
    :subname "//localhost/mydb"}) 

(defn do-something 
    (rec/transaction db 
    (do-something) 
    (if (some-error-test) 
     (do 
     (sql/set-rollback-only) 
     (raise :type "some-error" :message "Oops")))))