【发布时间】:2017-05-06 14:34:49
【问题描述】:
假设我们在编写 JOOQ 查询时有以下场景:
insertInto(TABLE)
.set(TABLE.NAME, "...")
.set(TABLE.FK, null) -- breaks FK constraint!
//...
.execute();
还有:
transactional(configuration -> {
insertInto(TABLE)
// list of sets that are OK
.execute();
throw new RuntimeException();
}
是以下语句:
在数据库中执行语句并回滚整个语句(不提交插入)时,第一个查询将失败(最迟)并返回
DataAccessException。第二个查询虽然已经正确执行,但会在抛出异常时回滚。
正确吗?
最后,在以下情况下:
{ // non transactional code block
insertInto(TABLE)
// list of sets that are OK
.execute();
throw new RuntimeException();
}
插入将在数据库上执行,但在抛出异常时将不会回滚,因为它不在事务上下文中。
这都是正确的,还是我误解了什么?
【问题讨论】:
标签: orm transactions spring-transactions jooq transactional