我正在尝试创建一个新的数据库对象,保存它,然后检查保存是否成功。这样做的正确方法是什么:
class Document {
String externalId;
static constraints {
externalId(blank: false, unique: true);
}
}
def createDocuments(List<String> ids) {
Document.withTransaction() {
ids.each { String id ->
new Document(externalId: id).save();
}
}
// want to test here if transaction succeeded.
}
此事务可能会失败,因为其他用户可能同时创建了其中一个文档。因此,虽然一个实例是有效的(即它的 externalId 不为空),但它可能不是唯一的。但是不运行事务就无法判断。
该怎么办?
更新
根据到目前为止提供的答案,这是我的问题的症结所在:
如果我运行一个调用多个保存的事务,保存的对象何时可用于其他休眠会话?一些可能性:
save
通话返回时- 事务提交时
- 其他一些不确定的时间(大概在#2之前)
如果save
一个对象由于唯一性约束而失败,并且我回滚了事务,那么所有其他保存是否也会回滚,即使它们没有冲突?如果不是,那么将所有这些都包含在事务中的意义何在?