В чем разница между сохранением класса домена и сохранением сеанса - PullRequest
1 голос
/ 16 июня 2020

Может ли кто-нибудь объяснить мне разницу между этими примерами кода (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)

1 Ответ

0 голосов
/ 16 июня 2020

Одно отличие состоит в том, что session.save(person) будет работать с любой сущностью, отображаемой в этом сеансе Hibernate, где person.save() работает только с сущностями GORM (которые также отображаются для вас в сеансе Hibernate).

При использовании GORM на самом деле нет веских причин использовать session.save(person).

Я знаю, что вы не спрашивали о передовых методах или о GORM Data Service, но касались вашего вопроса ...

В последних версиях 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

        // ...
    }
}
...