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

标签 grails

我还在学习Grails。我正在一点一点地建立我的启动项目。请原谅我这么多新手问题。
命令 generate-all 创建我的图书服务类。 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)
}
Grails 使用保存操作生成 BookController,该操作调用服务来保存我的书。
bookService.save(book)
到现在为止还挺好。我可以毫无问题地保存。但是,我将 bookService.save(book) 替换为 book.save() 在保存 Action 中。现在,它不会将我的书保存到数据库中。我也试试 book.save(刷新:真) .它也不会保存这本书。
你知道为什么 book.save() (有或没有flush:true)不会保存但 bookService.save(book) 会保存吗?
不知道是什么接口(interface) BookService 在 Grails 中的意思。
你能教我在哪里可以向 BookService 添加更多方法吗?
非常感谢。

最佳答案

不允许保存外部交易。 Controller 不是事务性的。如果要保存在 Controller 中,请在事务中移动保存逻辑,例如 -

Book.withTransaction { status ->
  ...
}
https://github.com/hibernate/hibernate-orm/blob/5.2/migration-guide.adoc#misc
最佳做法是使用 Service所有数据库相关事件的层。
大约interface Service请查看http://gorm.grails.org/latest/hibernate/manual/index.html#dataServices
Grails: How to override generated service method?
Grails 3.3.3 generate-all <domain class> Creates only the Service Interface

关于grails - 你能告诉我如何保存我的域类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64567808/

相关文章:

grails - GrailsApplication src/classes

grails - 如何找到领域对象相关类的参数?

hibernate - 如何在grails中保存具有hasOne和belongsTo关系的对象

grails - 使用Grails 3.3.2 w/rabbitmq-native插件(3.4.4),具有prefetch = 1的单个使用者在发生异常后停止使用消息

Grails - 实体名称为空

tomcat - Grails STS 项目不会启动 Web 服务

grails - 重命名 Grails 域类中显示的字段名称

java - 使用 Resin 和 Grails 时抛出 UnsupportedEncodingException

grails - 如何在Grails生成的Content-Type header 中删除charset = utf-8

grails - 在Spring Security UI Grails插件中添加一些用户的属性