Как я понимаю из документов Scalikejdbc, если я хочу иметь транзакцию, мне нужно пройти сеанс. Как это:Scalikejdbc. Управляйте транзакциями без явной зависимости от 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 в классе подписи?
ли вы когда-нибудь найти решение? – jen
@jen no. Мы перешли на Слик. Scalikejdbc и его транзакции беспокоили меня, потому что я не хотел добавлять стороннюю зависимость к подписям моих методов. У Slick есть несколько схожие проблемы (нам нужно выставить DBIOAction, если мы хотим объединить их в транзакции), но теперь я также думаю, что это не проблема. –