Домен Класс:Grails 3 "MissingMethodException" ошибка на классе домена сохранить() метод (и другие методы)
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)
}
Так что кажется, что метод «сохранить» не найден .. WTF?
где вы вызываете 'save' в этом коде? Я не вижу его –
Я обновил и добавил код –
несвязанный - 'nullable: false' является значением по умолчанию в классах домена, поэтому вы можете удалить весь блок' ограничений ' –