2015-11-11 3 views
2

После запуска следующей спецификации таблица существует. Я ожидал, что он никогда не будет присутствовать, поскольку он должен существовать только в рамках транзакции в конечном итоге.AutoRollback не откатывается

import org.specs2.mutable.Specification 
import scalikejdbc.{DB, NamedDB} 
import scalikejdbc.specs2.mutable.AutoRollback 

class MyQuerySpec extends Specification with ArbitraryInput { 

    sequential 

    DBs.setup('myDB) 

    "creating the table" in new AutoRollback { 
    override def db(): DB = NamedDB('myDB).toDB() 
    private val tableName = s"test_${UUID.randomUUID().toString.replaceAll("-", "_")}" 
    private val query = new MyQuery(tableName) 

    query.createTable 
    ok 
    } 
} 

Линия DBs.setup('myDB) не является частью примеров. Но если я удалить его, я получаю исключение java.lang.IllegalStateException: Connection pool is not yet initialized.(name:'myDB)

Источник MyQuery.create:

SQL(s"DROP TABLE IF EXISTS $tableName").execute().apply() 
SQL(s""" 
    |CREATE TABLE $tableName (
    | id    bigint PRIMARY KEY 
    |)""".stripMargin).execute().apply() 

Config:

db { 
    myDB { 
    driver = "org.postgresql.Driver" 
    url = "****" 
    user = "****" 
    password = "****" 
    poolInitialSize = 1 
    poolMaxSize = 300 
    poolConnectionTimeoutMillis = 120000 
    poolValidationQuery = "select 1 as one" 
    poolFactoryName = "commons-dbcp2" 
    } 
} 

ScalikeJDBC v2.2.9

+1

попробуйте установить 'autoCommit =" false "или' defaultAutoCommit = "false" 'в свойствах соединения. – Rumoku

+0

Похоже, что 'defaultAutoCommit =" false "' работал. Спасибо. Будет полностью подтвержден после хорошего ночного сна. * yawn * – Synesso

+0

Я был неправ. Это не сработало. Только, когда я проверил, список схем не обновлялся в IntelliJ. Сожалею. – Synesso

ответ

1

MyQuery#createTable должен принять неявный параметр, как это:

def createTable(implicit session: DBSession)