删除即使在服务中也不起作用?

编程入门 行业动态 更新时间:2024-10-08 22:55:30
本文介绍了删除即使在服务中也不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有图书领域

package bookfinal class Book { String name static constraints = { } }

Book Controller如下

Book Controller is as follows

package bookfinal class BookController { def bookService def destroy(Long id){ bookService.destroy(id) redirect(action:'index') } def index() { [books: Book.findAll()] } def create(){ } def save(){ def book = new Book(params) book.save() redirect(action:'show', id:book.id) } def edit(Long id){ [book: Book.get(id)] } def update(Long id){ bookService.update(id, params) redirect(action:'index') } def show(Long id){ [book: Book.get(id)] } }

服务如下

package bookfinal import grails.gorm.transactions.Transactional @Transactional class BookService { def destroy(Long id) { def b = Book.get(id) b.delete() } def update(Long id, params){ def book = Book.get(id) book.properties = params book.save() } }

显示页面如下

<h1> ${book.name} </h1> <g:link action="edit" id="${book.id}">Edit</g:link> <g:link action="destroy" id="${book.id}">Delete</g:link> <g:link action="index">Back</g:link>

现在,当我单击删除"时,它会重定向到索引,但不会删除该记录.为什么删除甚至在服务中也不起作用?我正在使用Grails 3.3.2版本.当我执行delete(flush:true)时,它可以工作,但是我期望只是delete()在服务中工作,因为它是事务性的.我有什么想念的吗?感谢您的帮助.谢谢!

Now, when i click on delete it redirects to index but the record isn't deleted. Why is delete not working even within service? I am using Grails 3.3.2 version. When i do delete(flush:true) then it works but i was expecting that just delete() work in service since it is transactional. Am i missing anything? I appreciate any help. Thanks!

推荐答案

这是Grails3的更改之一.检查官方Grails3文档:

It's one of the Grails3 changes. Check official Grails3 docs:

save方法通知持久性上下文应保存或更新实例.除非使用flush参数,否则该对象将不会立即保留

The save method informs the persistence context that an instance should be saved or updated. The object will not be persisted immediately unless the flush argument is used

更多信息:

在早期版本的GORM中,刷新模式默认为AUTO.设置此设置后,无论是否存在事务,都将在每次查询之前刷新会话.

In previous versions of GORM the flush mode defaulted to AUTO. With this setting the session would be flushed with or without the presence of a transaction and before every query.

如果开发人员不能完全理解AUTO的行为,那么在查询之前频繁刷新会话可能会导致意外的性能后果.

The frequent flushing of the session before queries can lead to unintended performance consequences if the behaviour of the AUTO is not fully understood by the developer.

请记住,COMMIT是GORM 6中新的默认刷新模式,它将在事务提交时刷新会话.您可以通过在应用程序配置(例如application.yml)中配置刷新模式来恢复以前的行为:

With this in mind COMMIT is the new default flush mode in GORM 6, which will flush the session on transaction commit. You can restore the previous behaviour by configuring the flush mode in your application configuration (for example application.yml):

hibernate: flush: mode: AUTO

更多推荐

删除即使在服务中也不起作用?

本文发布于:2023-10-26 06:49:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1529390.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中也   不起作用

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!