我正在尝试创建一个允许用户喜欢/不喜欢我的Grails应用程序中的进程的函数。我之前已经完成了文章并且它的工作完美。出于某种原因,当我尝试以相同的方式处理进程时,我得到了这个例外:
Message
Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error evaluating expression [businessProcess?.getLikedCount()] on line [18]: could not prepare statement
Caused by
Column "THIS_.LIKED" does not exist Column "THIS_.LIKED" not found; SQL statement: select count(*) as y0_ from business_process_like this_ where this_.liked=? limit ? [42122-191]
这是BusinessProcessLike
代码的域类:
class BusinessProcessLike {
BusinessProcess businessProcess
ServiceUser serviceUser
boolean liked;
static constraints = {
businessProcess nullable: false
serviceUser nullable: false
liked nullable: false
}
}
相比之下,ArticleLike看起来像这样:
class ArticleLike {
Article article
ServiceUser serviceUser
boolean liked;
static constraints = {
article nullable: false
serviceUser nullable: false
}
}
这可能是什么原因?我已经检查了一些关于同一问题的帖子,但事实上所使用的词是由数据库保留的,但事实并非如此。
此外,这是导致异常的方法:
@Transactional
def businessProcessLikeAction(){
ServiceUser user = springSecurityService.currentUser
BusinessProcess businessProcess = BusinessProcess.findById(params.getIdentifier())
//line below throws the exception
BusinessProcessLike processLike = BusinessProcessLike.findByBusinessProcessAndServiceUser(businessProcess, user);
if(!processLike){
processLike = new BusinessProcessLike(businessProcess: businessProcess, serviceUser: user)
}
processLike.liked = Boolean.valueOf(params.status)
processLike.save()
redirect(action: "showBusinessProcessList")
}
答案 0 :(得分:0)
好的,以防有人遇到同样的问题 - 之所以抛出异常是因为在添加新列之前,表中有一个对象,所以问题不在代码,但在我的行为的错误年表中。无论何时我试图对给定的表进行操作,我都有例外,因为GORM希望对表中存在的列执行某些操作,但不会在先前创建的记录中执行。