0

我正在使用 Mysql 和 Grails。

假设我有一个实体类Bookbookmysql 中的表有一auto_incremented id列。

说下面是我的服务方法:

@Transactional
public void someMethod() {
    Book book = new Book("Book Name", "Author Name") // book.id is null here 
    book.save();
    println book.id // id is initialized
}

当我使用调试器停止println语句时,我看到book' 的id属性已初始化。由于我对 db 没有flushing任何意义,因此该行尚未插入到 db 中,因此id在插入时不会生成,而是以其他方式生成。一种可能的id初始化方式似乎是当在实体上执行auto_increment该方法时,休眠运行一个查询只是为了获取下一个值save()(不确定是否是这种情况)。如果是这种情况,那么 2 个并发事务获得相同的 ID 呢?

4

0 回答 0