2016-03-29 6 views
2

Как я понимаю из документов 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 в классе подписи?

+0

ли вы когда-нибудь найти решение? – jen

+0

@jen no. Мы перешли на Слик. Scalikejdbc и его транзакции беспокоили меня, потому что я не хотел добавлять стороннюю зависимость к подписям моих методов. У Slick есть несколько схожие проблемы (нам нужно выставить DBIOAction, если мы хотим объединить их в транзакции), но теперь я также думаю, что это не проблема. –

ответ