我有一个表在两列上有唯一的索引约束。我检查并插入数据库的代码如下:
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异常的情况?我应该防范吗?