Grails DetachedCriteria使用'where'抛出SyntaxErrorException

时间:2014-06-24 10:04:36

标签: mysql hibernate grails

我正在尝试进行下一个选择:


ArrayList<Personal> personalAuxList = new ArrayList<Personal>()
def campaigns = Campaign.findAllByEntidad(entidadInstance,[sort: "fechaFin", order: "desc"])
//Here a declare a DetachedCriteria using where method of domain class
def notificacionesQuery = Notificacion.where {
    orden.linea.propuesta.campaign in campaigns
}
//For each persona from a search result done before     
for(Personal person : result.results){
    if(!personalAuxList.contains(person)){
        //I add a condition to query creating new one
        def notisOfPersonalQuery = notificacionesQuery.where {
            personal == person
        }
        //Fail in this line when i list the result
        def notificaciones = notisOfPersonalQuery.list()
        notificaciones = notificaciones.sort{it.orden.linea.fin}.reverse()
        notisOfPersonal.put(person.id, notificaciones.empty ? null : notificaciones.first())
        personalAuxList.add(person)
    }
}

在本地工作正常,但是当我上传战争时,开始在服务器中失败:


类: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

消息:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行附近使用正确的语法,并在第1行使用this_.personal_id = 6616'


跟踪:


Line | Method

->>  411 | handleNewInstance    in com.mysql.jdbc.Util

|    386 | getInstance          in     ''
|   1052 | createSQLException . in com.mysql.jdbc.SQLError
|   4098 | checkErrorPacket     in com.mysql.jdbc.MysqlIO
|   4030 | checkErrorPacket . . in     ''
|   2490 | sendCommand          in     ''
|   2651 | sqlQueryDirect . . . in     ''
|   2677 | execSQL              in com.mysql.jdbc.ConnectionImpl
|   2134 | executeInternal . .  in com.mysql.jdbc.PreparedStatement
|   2300 | executeQuery         in     ''
|     97 | executeQuery . . . . in org.apache.commons.dbcp.DelegatingPreparedStatement
|    671 | doCall               in grails.gorm.DetachedCriteria$_list_closure2
|    934 | doCall . . . . . . . in grails.gorm.DetachedCriteria$_withPopulatedQuery_closure9
|    669 | doCall               in org.grails.datastore.gorm.GormStaticApi$_withDatastoreSession_closure20
|    302 | execute . . . . . .  in org.grails.datastore.mapping.core.DatastoreUtils
|     34 | execute              in org.grails.datastore.gorm.AbstractDatastoreApi
|    668 | withDatastoreSession in org.grails.datastore.gorm.GormStaticApi
|    916 | withPopulatedQuery   in grails.gorm.DetachedCriteria
|    667 | list . . . . . . . . in     ''
|    666 | list                 in     ''
|    301 | search . . . . . . . in com.publidirecta.PersonalController
^    722 | run                  in java.lang.Thread

1 个答案:

答案 0 :(得分:0)

我最终解决了,在本地我在DDBB中获得了广告系列,但是在真实服务器上没有,所以如果没有广告系列,我会更改代码以添加条件:


ArrayList<Personal> personalAuxList = new ArrayList<Personal>()
def campaigns = Campaign.findAllByEntidad(entidadInstance,[sort: "fechaFin", order: "desc"])
if (campaigns != null && campaigns.size() > 0) {
    def notificacionesQuery = Notificacion.where {
        orden.linea.propuesta.campaign in campaigns
    } 
    for(Personal person : result.results){
        if(!personalAuxList.contains(person)){
            def notisOfPersonalQuery = notificacionesQuery.where {
                personal == person
            }
            def notificaciones = notisOfPersonalQuery.list()
            notificaciones = notificaciones.sort{it.orden.linea.fin}.reverse()
            notisOfPersonal.put(person.id, notificaciones.empty ? null : notificaciones.first())
            personalAuxList.add(person)
        }
    }
}