Hibernate Grails:Author.withTransaction{}和Book.withTransaction{}之间的区别,如果Author和Book都应该保存在该事务中

Hibernate Grails:Author.withTransaction{}和Book.withTransaction{}之间的区别,如果Author和Book都应该保存在该事务中,hibernate,grails,gorm,Hibernate,Grails,Gorm,Grails版本3.2.9 因为withTransaction没有说明使用Author.withTransaction和Book.withTransaction有什么区别,以防我想在该事务中同时保存Author和Book域实例,如下所示: Author author = Author.get(1) Book book = Book.findByAuthor(author) Author.withTransaction { // what if we use Book here instead

Grails版本3.2.9

因为
withTransaction
没有说明使用
Author.withTransaction
Book.withTransaction
有什么区别,以防我想在该事务中同时保存
Author
Book
域实例,如下所示:

Author author = Author.get(1)
Book book = Book.findByAuthor(author)

Author.withTransaction { // what if we use Book here instead of Author
    author.age = 39
    book.price = 45

    author.save(failOnError: true)
    book.save(failOnError: true)
}

没有找到解释差异的其他文档。

没有区别,它们都做相同的事情。每个域类都用
withTransaction
修饰,这是相同的跨国代码。你可以使用
Foo.withTransaction
,甚至不做任何与
Foo相关的事情,这没关系。

没有区别,它们都做相同的事情。每个域类都用
withTransaction
修饰,这是相同的跨国代码。您可以使用
Foo.withTransaction
甚至不做任何与
Foo
相关的事情,这并不重要。

因此语法有点奇怪,实际上在哪个域上调用
withTransactional()
方法并不重要。顺便说一句,文档中提到的事实是没有任何区别,还是我们应该猜到的?:)@数据库事务与实体不关联。事务与连接相关联。您可以在一个事务中与任意多的实体/表/行进行交互。“因此语法有点奇怪,实际上使用Transactional()方法调用哪个域并不重要。”-我认为这与语法无关。无论您在哪个域类上调用该方法,语法都是完全相同的。语法是
.withTransaction()
“首先想到的是,该方法应该有一个特定于该类的逻辑”——它不是。“否则为什么它在那个类上可用”-因为我们需要把这个方法放在某个地方。我们本可以在名为
TransactionHelper
或其他任何类上使其成为静态方法,但我们没有这样做。如果存在一个域类,那么您只能调用
with transaction
,我们就是这么做的。本来可以做得不同,但事实并非如此。因此语法有点奇怪,实际上在哪个域上调用
withTransactional()
方法并不重要。顺便说一句,文档中提到的事实是没有任何区别,还是我们应该猜到的?:)@数据库事务与实体不关联。事务与连接相关联。您可以在一个事务中与任意多的实体/表/行进行交互。“因此语法有点奇怪,实际上使用Transactional()方法调用哪个域并不重要。”-我认为这与语法无关。无论您在哪个域类上调用该方法,语法都是完全相同的。语法是
.withTransaction()
“首先想到的是,该方法应该有一个特定于该类的逻辑”——它不是。“否则为什么它在那个类上可用”-因为我们需要把这个方法放在某个地方。我们本可以在名为
TransactionHelper
或其他任何类上使其成为静态方法,但我们没有这样做。如果存在一个域类,那么您只能调用
with transaction
,我们就是这么做的。本来可以做得不同,但事实并非如此。