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

Grails 删除即使在服务中也不起作用?,grails,grails3,Grails,Grails3,我有一本书 package bookfinal class Book { String name static constraints = { } } 图书管理员如下 package bookfinal class BookController { def bookService def destroy(Long id){ bookService.destroy(id) redirect(action:'inde

我有一本书

package bookfinal

class Book {

    String name
    static constraints = {
    }
}
图书管理员如下

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>
服务如下

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>
显示页面如下

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>
${book.name}
编辑
删除
返回

现在,当我单击delete时,它会重定向到index,但记录不会被删除。为什么删除即使在服务中也不起作用?我使用的是Grails3.3.2版本。当我执行delete(flush:true)时,它可以工作,但我希望delete()可以在服务中工作,因为它是事务性的。我遗漏了什么吗?谢谢你的帮助。谢谢

这是Grails3的变化之一。检查:

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

:

在GORM的早期版本中,刷新模式默认为自动。使用此设置,在每次查询之前,无论是否存在事务,都会刷新会话

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

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