My Grails 2.3.4应用程序具有以下控制器操作:
def delete(Long id) {
def bookInstance = Book.get(id)
if (!bookInstance) {
flash.message = message(code: 'default.not.found.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(controller: "book", action: "list")
return
}
try {
bookInstance.delete(flush: true)
flash.message = message(code: 'default.deleted.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(controller: "book", action: "list", params: [q: book.title])
}
catch (DataIntegrityViolationException e) {
flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'book.label', default: 'Book'), id])
redirect(action: "show", id: id)
}
}
这两个域类:
class Book {
static auditable = true
String title
static belongsTo = [author: Author]
static mapping = {
author ignoreNotFound: true
}
}
class Author {
static auditable = true
String name
static hasMany = [books:Book]
}
请注意author ignoreNotFound: true
,因为我在这里处理遗留数据库。上述delete
操作允许“孤儿”'要删除Book
。
现在,在两台服务器上部署了与此应用程序完全相同的WAR文件。在一台服务器上删除孤立的Book
可以毫无障碍地工作。但是在另一台服务器上,我收到以下错误:
not-null属性引用null或transient值:Book.author; 嵌套异常是org.hibernate.PropertyValueException:not-null 属性引用null或transient值:Book.author
我对错误的含义有所了解,但鉴于正在执行相同的代码(并且Book
在两种情况下都是孤立的),我会相信可能有某些东西否则(除了动作代码)导致问题出现在一台服务器上而不是另一台服务器上。
知道该找什么?