在控制器的index
操作中,我仍然拥有在Grails中执行create-controller
命令时自动生成的代码。在另一个操作中向对象添加数据后,域对象上的list
方法不再有效。
索引功能:
def index(Integer max) {
params.max = Math.min(max ?: 10, 100)
respond Worksheet.list(params), model:[worksheetInstanceCount: Worksheet.count()]
}
我认为这个问题导致了这个问题:
def addResults(Map results,id) {
def sql = new Sql(dataSource)
sql.execute("""update domain set results=? where id=?""",new JsonBuilder(results).toString(), id)
}
此数据将作为clob
保存到数据库中。还有其他地方我更新那个特定的域对象,除了我正在更新的是数据库中的整数。
列表操作现在抛出错误消息:argument type mismatch
这是stacktrace:
Error |
2015-11-20 23:14:47,165 [http-bio-8080-exec-2] ERROR property.BasicPropertyAccessor - HHH000123: IllegalArgumentException in class: com.ABET.Results, setter method of property: r_id
Error |
2015-11-20 23:14:47,166 [http-bio-8080-exec-2] ERROR property.BasicPropertyAccessor - HHH000091: Expected type: int, actual value: java.lang.String
Error |
2015-11-20 23:14:47,172 [http-bio-8080-exec-2] ERROR errors.GrailsExceptionResolver - IllegalArgumentException occurred when processing request: [GET] /ABET/worksheet/index
argument type mismatch. Stacktrace follows:
Message: argument type mismatch
Line | Method
->> 43 | <init> in grails.orm.PagedResultList
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 17 | $tt__index in com.ABET.WorksheetController
| 198 | doFilter . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 53 | doFilter . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run . . . in java.lang.Thread
答案 0 :(得分:2)
假设addResults()
是罪魁祸首,请尝试使用gorm而不是Groovy Sql
。
import org.springframework.transaction.annotation.Transactional
...
@Transactional
def addResults(Map results, int id) {
def instance = Domain.get(id)
instance.results = new JsonBuilder(results).toString()
instance.save()
}
请注意,在您的示例id
中没有类型。
答案 1 :(得分:0)
为了解决这个问题,我刚刚删除了一个用于存储数据的表,并将该数据移动到我遇到问题的域对象中。