Wie ich aus Docs von Scalikejdbc verstehe, wenn ich eine Transaktion haben möchte, muss ich eine Sitzung übergeben. Gefällt mir:Scalikejdbc. Verwalten Sie Transaktionen ohne explizite Abhängigkeit von Scalikejdbc und Sitzung
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"""
}
}
Und dieses Ding macht mich explizit abhängig von Scalikejdbc. Ich möchte keine Abhängigkeit von Scalike in meinen Domäneneigenschaften haben. Was ich will, ist so etwas wie diese:
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"""
}
}
Gibt es eine Möglichkeit Transaktionen haben und Abhängigkeiten nicht auf Sitzungen und scalike in der Klasse Signatur?
Haben Sie jemals eine Lösung finden? – jen
@jen Nr. Wir sind zu Slick gewechselt. Scalikejdbc und seine Transaktionen störten mich, weil ich meinen Methodensignaturen keine Abhängigkeit von Dritten hinzufügen wollte. Slick hat ähnliche Probleme (wir müssen DBIOAction verfügbar machen, wenn wir sie in der Transaktion kombinieren wollen), aber jetzt denke ich auch, dass dies kein Problem ist. –