假设我有以下方法:
在 WebsitesList 模型上:
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)
}
如您所见,我在 WebsitesList 的 create 方法上启动了一个事务,该方法调用了 Website 模型的 create 方法。
如果由于某种原因无法创建网站列表,我的目标是删除创建的网站记录。为了对其进行测试,我提出了一个异常,并且正如预期的那样,没有创建 WebsitesList 和 List 记录。但是,网站记录在异常发生后不会回滚并保留在数据库中。
我的理论是 Website.create 方法创建了一个新的连接,而不是使用现有的。任何人都知道我该如何解决这个问题?
谢谢。