将数据添加到对象

时间:2015-11-21 04:26:23

标签: grails groovy

在控制器的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

2 个答案:

答案 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)

为了解决这个问题,我刚刚删除了一个用于存储数据的表,并将该数据移动到我遇到问题的域对象中。