【问题标题】:Grails 3 "MissingMethodException" error on domain class save() method (and other methods)域类 save() 方法(和其他方法)上的 Grails 3“MissingMethodException”错误
【发布时间】:2015-12-16 00:43:08
【问题描述】:

领域类:

package com.myapp.gorm.log

import com.myapp.gorm.security.User
import com.myapp.gorm.system.TransactionJournal

class LogJournal {

    static constraints = {
      message nullable: false
      category nullable: false
      user1 nullable: false
    }

    static mapping = {
      dateCreated column: "ts"
      lastUpdated column: "ts_update"
    }

LogMessage        message
LogCategory       category
User               user1
User               user2
String             value
TransactionJournal transaction

Date dateCreated
Date lastUpdated


boolean equals(o) {
    if (this.is(o)) return true
    if (getClass() != o.class) return false

    LogJournal that = (LogJournal) o

    if (category != that.category) return false
    if (dateCreated != that.dateCreated) return false
    if (id != that.id) return false
    if (lastUpdated != that.lastUpdated) return false
    if (message != that.message) return false
    if (transaction != that.transaction) return false
    if (user1 != that.user1) return false
    if (user2 != that.user2) return false
    if (value != that.value) return false

    return true
}

int hashCode() {
    int result
    result = message.hashCode()
    result = 31 * result + category.hashCode()
    result = 31 * result + user1.hashCode()
    result = 31 * result + (user2 != null ? user2.hashCode() : 0)
    result = 31 * result + (value != null ? value.hashCode() : 0)
    result = 31 * result + (transaction != null ? transaction.hashCode() : 0)
    result = 31 * result + dateCreated.hashCode()
    result = 31 * result + (lastUpdated != null ? lastUpdated.hashCode() : 0)
    result = 31 * result + id.hashCode()
    return result
  }

}

错误:

groovy.lang.MissingMethodException: No signature of method:     c       com.domainboost.gorm.log.LogJournal.save() is applicable for argument types: ()     values: []
Possible solutions: save(), save(boolean), save(java.util.Map), wait(), last(), any()

或者其他域类正常工作,只有这个有问题。我看到 grails 无法对此类实例执行任何方法。

没有任何验证错误。

我称这个域类(它是 logback: appender):

class SystemAppender extends AppenderBase<ILoggingEvent>  {

   static appInitialized = false

  @Override
  public void append(ILoggingEvent event) {
    if (appInitialized) {
        LogMessage logMessage = LogMessage.findByMessage(event.getMessage())
        if (!logMessage) {
            logMessage = new LogMessage()
            logMessage.message = event.getMessage()
            logMessage.save(flash: true)
        }
        String categoryStr = event.argumentArray[0]
        LogCategory logCategory = LogCategory.findByCategory(categoryStr)
        if (!logCategory) {
            logCategory = new LogCategory()
            logCategory.category = categoryStr
            logCategory.save(flash: true)
        }
        User user1 = null
        if (event.argumentArray.contains(1)) {
            user1 = event.argumentArray[1]
        }
        User user2 = null
        if (event.argumentArray.contains(2)) {
            user1 = event.argumentArray[2]
        }
        TransactionJournal tj = null
        if (event.argumentArray.contains(3)) {
            tj = event.argumentArray[3]
        }
        LogJournal logJournal = new LogJournal()
        logJournal.category = logCategory
        logJournal.message = logMessage
        logJournal.user1 = user1
        logJournal.user2 = user2
        logJournal.transaction = tj
        LogJournal.save()

      }
  }
}

以及我如何在 grails 控制台中测试它

import org.slf4j.Logger
import org.slf4j.LoggerFactory

def Logger logger = LoggerFactory.getLogger("sysLog")
logger.info("message", "category")

错误开启 LogJournal.save()

以错误结尾的代码在 GormStaticApi.groovy 中

@CompileStatic(TypeCheckingMode.SKIP)
    def methodMissing(String methodName, Object args) {
    FinderMethod method = gormDynamicFinders.find { FinderMethod f ->   f.isMethodMatch(methodName) }
    if (!method) {
        throw new MissingMethodException(methodName, persistentClass, args)
    }

所以似乎找不到方法“保存”.. 什么鬼?

【问题讨论】:

  • 您在该代码中在哪里调用save?我看不到它
  • 我更新并添加了代码
  • 不相关 - nullable: false 是域类中的默认值,因此您可以删除整个 constraints
  • 我将默认行为更改为可为空:true

标签: grails groovy grails-orm grails-domain-class grails-3.0


【解决方案1】:

这个

LogJournal.save()

正在寻找类的静态方法。你想要一个小写的首字母来调用实例变量的保存:

logJournal.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多