Grails 3 "MissingMethodException" 域 class save() 方法(和其他方法)上的错误

Grails 3 "MissingMethodException" error on domain class save() method (and other methods)

域Class:

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()

或者其他域class都正常,只有这个有问题。我看到 grails 无法在此 class 实例上执行任何方法。

没有任何验证错误。

我称这个域为 class(它是 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".. 什么鬼?

这个

LogJournal.save()

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

logJournal.save()