Давайте предположим, что у меня есть следующие методы:
Об одном WebsitesList модели:О сделках и вложенная DB пишет (с помощью Scala)
def create(urls: List[String]) = DB.withTransaction(implicit c => {
val websites = urls.map(Website.create(_))
val listId: Option[Long] = SQL("INSERT INTO LIST (created_date, active) VALUES ({created_date}, {active})").
on('created_date -> new Date(), 'active -> true).
executeInsert()
websites.foreach(websiteId =>
SQL("INSERT INTO websites_list (list_id, website_id) VALUES ({listId}, {websiteId})").
on('listId -> listId.get, 'websiteId -> websiteId.id).executeInsert()
)
throw new Exception()
})
А на модели сайта:
def create(url: String): Website = DB.withConnection {
implicit c =>
val currentDate = new Date()
val insertedId: Option[Long] = SQL("insert into websites (url, Date_Added) values ({url}, {date})").
on('url -> url, 'date -> currentDate).
executeInsert()
Website(insertedId.get, url, currentDate)
}
As вы можете видеть, я запускаю транзакцию по методу создания веб-сайтов, и указанный метод вызывает метод создания модели веб-сайта.
Моя цель - удалить созданные записи веб-сайтов, если по какой-либо причине не удалось создать веб-сайт. Чтобы протестировать его, я создаю исключение и, как и ожидалось, записи WebsitesList и List не создаются. Тем не менее, записи веб-сайтов не отменены после исключения и остаются в базе данных.
Моя теория заключается в том, что метод Website.create создал новое соединение вместо существующего. Кто-нибудь знает, как я могу это исправить?
Спасибо.
где объект SQL находится? –
@Alex 'anorm.SQL' – maba
Что такое пакет Connection? – RafaelTSCS