Grails 你能告诉我如何保存我的域类吗

Grails 你能告诉我如何保存我的域类吗,grails,Grails,我还在学习圣杯。我正在一点一点地建立我的启动项目。请原谅我问了这么多新手问题 命令generateall创建MyBook服务类。Grails生成BookService。看起来像这样 import grails.gorm.services.Service @Service(Book) interface BookService { Book get(Serializable id) List<Book> list(Map args) Long count()

我还在学习圣杯。我正在一点一点地建立我的启动项目。请原谅我问了这么多新手问题

命令generateall创建MyBook服务类。Grails生成BookService。看起来像这样

import grails.gorm.services.Service
@Service(Book)
interface BookService {
    Book get(Serializable id)
    List<Book> list(Map args)
    Long count()
    void delete(Serializable id)
    Book save(Book book)
}
到目前为止还不错。我可以省钱,没有任何问题。但是,我在保存操作中将bookService.save(book)替换为简单的book.save()。现在,它无法将我的书保存到数据库中。我还尝试了book.save(flush:true)。这也救不了这本书

你知道为什么book.save()(带或不带flush:true)不会保存,而bookService.save(book)会保存吗

我不知道接口BookService在Grails中是什么意思。 你能教我在哪里可以为图书服务添加更多的方法吗


非常感谢。

不允许保存外部事务。控制器不是事务性的。如果要在控制器中保存,请在事务中移动保存逻辑,如-

Book.withTransaction { status ->
  ...
}

最佳实践是将
服务
层用于所有与数据库相关的活动

有关
接口服务的信息,请查看


哇!太好了!我永远也找不到这些页面,因为我不知道Grails术语。谢谢我可以再问你一个问题吗?因此,generate all生成一个数据访问服务。它与Grails文档中的此服务不同。对的GORM在编译时为您将数据访问服务转换为此服务。
Book.withTransaction { status ->
  ...
}