域 class 保存和会话保存有什么区别

What is difrence betwean domain class save and session save

有人可以向我解释这些代码示例 (Grails 3.3.11) 之间的区别吗

 Session session = sessionFactory.openSession()
 Person person           = new Person()
 person.firstName        = "John"
 person.lastName         = "Roy"
 person.address          = "New York"
 session.save(person)

 Person person           = new Person()
 person.firstName        = "John"
 person.lastName         = "Roy"
 person.address          = "New York"
 person.save(person)

一个区别是 session.save(person) 将与映射到该 Hibernate 会话中的任何实体一起使用,而 person.save() 仅适用于 GORM 实体(它们也为您映射到 Hibernate 会话中)。

使用 GORM 时确实没有充分的理由使用 session.save(person)

我知道您没有询问最佳实践或 GORM 数据服务,而是与您的问题相关...

使用最新版本的 GORM 最佳实践是拥有像这样的抽象 GORM 数据服务...

import grails.gorm.services.Service

@Service(Person)
interface PersonService {
    Person save(Person p)
}

然后将其注入到您想要保存的任何位置。例如,在控制器中:

class SomeController {
    PersonService personService

    def someAction() {
        Person p = new Person()

        // ...

        personService.save p

        // ...
    }
}