我从Scalikejdbc的文档中了解到,如果我想要有一个事务,我需要传递一个会话。如下所示:
class FooBarService {
val fooDao = new FooDao
val barDao = new BarDao
def fooBar(): Unit = {
DB localTx { session =>
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
}
}
class FooDao {
def foo(foo: Foo)(implicit session: DBSession): Unit = {
sql"""bla bla bla"""
}
}
class BarDao {
def bar(bar: Bar)(implicit session: DBSession): Unit = {
sql"""bla bla bla"""
}
}这让我明确地依赖于Scalikejdbc。我不想在我的领域特征中依赖Scalike。我想要的是这样的:
class FooBarService {
val fooDao = new FooDao
val barDao = new BarDao
def fooBar(): Unit = {
// My wrapper which abstract and is not dependent on Scalike or other library
MyWrapper.withinTransaction {
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
// or at least not to pass session to daos
DB withinTransaction {
fooDao.foo(new Foo())
barDao.bar(new Bar())
}
}
}
class FooDao {
def foo(foo: Foo): Unit = {
sql"""bla bla bla"""
}
}
class BarDao {
def bar(bar: Bar): Unit = {
sql"""bla bla bla"""
}
}有没有一种方法可以让事务在类签名中不依赖于会话和scalike?
发布于 2016-04-02 09:50:15
如果您的应用程序不是非阻塞体系结构,则可以使用线程本地for DB会话。
https://stackoverflow.com/questions/36279183
复制相似问题