我想实现实用函数/monad/aspect 来管理 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,并寻求改进我的方法的建议。也许我可以以某种方式修改我的功能以获得更好的结果?或者添加另一个单元类型特定功能?还是选择另一条路?
有任何想法吗?任何scala规范的方式来实现这个?谢谢。