scala で休止状態のトランザクションを管理するためのユーティリティ関数/モナド/アスペクトを実装し、最善のアプローチに関するアドバイスを探しています。
まず、次のようなカリー化関数を作成しようとしました:
def session() = sessionFactory.getCurrentSession()
def transaction() = session().getTransaction()
def tx[A, B](f: A => B)(a: A): B = {
try {
session().beginTransaction()
val r = f(a)
transaction().commit()
return r
} catch {
case e:
Throwable =>
transaction().rollback()
throw e
} finally {
session.close()
}
}
アイデアは、この関数で次のことができるということでした:
def saveMyEntity() {
session().save(new MyEntity)
}
tx(saveMyEntity)()
saveMyEntity 呼び出しはトランザクションにラップされます。
残念ながら、このコードで次のエラーが発生します。
[error] found : () => Unit
[error] required: ? => ?
[error] tx(saveMyEntity)()
私はまだscalaを学んでおり、アプローチを改善するためのアドバイスを探しています. より良い結果を得るために、何らかの方法で関数を変更できますか? または、別のユニット タイプ固有の機能を追加しますか? それとも別の道を選ぶ?
何か案は?これを実装するための標準的な方法はありますか? ありがとう。