Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用一对多关系时Grails withCriteria异常_Java_Grails_Groovy_Gorm - Fatal编程技术网

Java 使用一对多关系时Grails withCriteria异常

Java 使用一对多关系时Grails withCriteria异常,java,grails,groovy,gorm,Java,Grails,Groovy,Gorm,我有两个域名: class JobProcess { static constraints = { scriptUser(blank:false) scriptType() scriptName() scriptPath() scriptArgs(size:0..1000,nullable:true) scriptDateCreated(nullable:true) scriptDateS

我有两个域名:

class JobProcess {

    static constraints = {
       scriptUser(blank:false)
       scriptType()
       scriptName()
       scriptPath()
       scriptArgs(size:0..1000,nullable:true)
       scriptDateCreated(nullable:true)
       scriptDateStarted(nullable:true)
       scriptDateFinished(nullable:true)
       scriptRun()
       scriptId()
    }

    static mapping = {
      version false
    }
    User scriptUser  
    String scriptType
    String scriptName
    String scriptPath
    String scriptArgs
    Date scriptDateCreated
    Date scriptDateStarted
    Date scriptDateFinished
    String scriptRun
    int scriptId
}
以及:

此查询:

selected = JobProcess.withCriteria{
      like("scriptUser", "%${params.name}%")
      maxResults(params.max as int)
      firstResult(params.offset? params.offset.toInteger():0)
      }
我发现错误:

ERROR property.BasicPropertyAccessor  - IllegalArgumentException in class: common.User, getter method of property: id      
ERROR errors.GrailsExceptionResolver  - java.lang.ClassCastException@503ca729
我还尝试将类似部分替换为:
eq(“scriptUser”,1)
但我也会遇到同样的错误


怎么了?有什么想法吗?

如果
params.name
用户的
firstName
,请尝试以下操作:

JobProcess.withCriteria {
    scriptUser {
        like('firstName', "%${params.name}%")
    }
    maxResults(params.max as int)
    firstResult(params.offset ? params.offset.toInteger() : 0)
}

如果
params.name
有所不同,您能否澄清您的问题以解释如何使用它

以下是概念验证代码:

// grails-app/domain/JobProcess.groovy
class JobProcess {
    User scriptUser
}

// grails-app/domain/User.groovy
class User {
    String name
}

// grails-app/conf/Bootstrap.groovy
def init = { servletContext ->
    def foo = new User(name: 'foo').save()
    def bar = new User(name: 'bar').save()
    new JobProcess(scriptUser: foo).save()
    new JobProcess(scriptUser: bar).save()
    new JobProcess(scriptUser: bar).save()

    def result = JobProcess.withCriteria {
        scriptUser {
            like('name', 'ba%')
        }
    }
    result.each {
        println "Result ID: ${it.id}"
    }

    // prints:
    // Result ID: 2
    // Result ID: 3
 }

这基于“查询关联”部分。

我还可以按姓氏和姓氏组合:

selected = JobProcess.withCriteria {
          scriptUser {
            or {
              like('firstName', "%${params.name}%")
              like('lastName', "%${params.name}%")
            }
          }
          maxResults(params.max as int)
          firstResult(params.offset ? params.offset.toInteger() : 0)
      }

有没有直接使用fullName()的方法?

您能否澄清什么是
params.name
以及如何使用它?是名字吗?姓?两者兼而有之?谢谢,现在我明白我的错误了。我必须按我的用户域进行查询。所以请直呼其名,而不是scriptUser。回答你的问题,我认为没有
withCriteria
只是Hibernate的
Criteria
的一个抽象,我不确定它是否支持查询瞬态字段。将
fullName
作为域的属性可能会更容易。
selected = JobProcess.withCriteria {
          scriptUser {
            or {
              like('firstName', "%${params.name}%")
              like('lastName', "%${params.name}%")
            }
          }
          maxResults(params.max as int)
          firstResult(params.offset ? params.offset.toInteger() : 0)
      }