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)中配置刷新模式来恢复以前的行为: