并发访问

时间:2015-05-29 04:50:49

标签: sql slick

我有一个表在两列上有唯一的索引约束。我检查并插入数据库的代码如下:

def createNewEntry(myTableType: MyTableType) = database withSession { implicit session: Session =>

  val autoInc = myTableElems returning myTableElems.map(_.elemId)

  getElemForId(myTableType.elemId) match {
    case Some(oldTableType) =>
      if (oldTableType.isModified(myTableType))
        myTableElems.insert(myTableType.copy(version = oldTableType.version + 1))
    case None =>
      autoInc.insert(myTableType)
  }
  getElemForId(myTableType.elemId)
}

由于上述方法的并发访问,上述代码是否有可能导致DataIntegrityViolation异常?我有一个名为name的列上定义的唯一索引和另一个名为version的列。每当我调用这个createNewEntry方法时,如果是,我检查是否存在,我复制所有内容,增加版本并在数据库中插入新版本。

由于我使用Slick进行数据库访问,因此上述方法在数据库事务上下文和自动提交模式下工作。

我在数据库中包含条目的表格如下:

id name version
1  abc  1
2  xyz  1
3  abc  2

名称和版本强制执行唯一索引约束!

现在的问题是,是否存在可能出现DataIntegrityViolation异常的情况?我应该防范吗?

0 个答案:

没有答案