groovy多表关联查询

今天在学习条件查询过程中,关联的表总是报错,折腾了一个多小时,终于解决了。

情景再现:

=====================================

在src/groovy/command目录下新建SearchMemberCommand.groovy类

(类必须有包,否则IDEA调不到)

*command.groovy类(以command结尾)不会持久化,可用于不需要持久化或者和domain无关的action

class SearchMemberCommand {
    String teamName
    String name
    String gender
    Team team
}

-------------------------------------

MemberController

 def search = {SearchMemberCommand cmd ->

        if(request.method == "POST"){
            def criteria = Member.createCriteria()
            def resultList = criteria{
                and{
                        if(cmd.name)
                            like('name',"%${cmd.name}%")
                        if(cmd.gender)
                            like('gender',"${cmd.gender}")
                        if(cmd.team.id) {
                            Team{
                                eq('id', "${cmd.team.id}"  as Long)
                            }
                            fetchMode('team.id', FetchMode.EAGER)
                        }
                }
                order("id","desc")
            }
            respond resultList, view: "index"
        }else{
            Member memberInstance = new Member()
            respond memberInstance
        }

    }

-------------------------------------

member/search.gsp

 <g:select name="gender" from="${memberInstance.constraints.gender.inList}" value="${memberInstance?.gender}" />

=====================================

报错:


=====================================

解决方法:

把查询中的Team改为team

=====================================

Team.groovy

package webquick

class Team {

    String teamName
    Date foundDate

    static constraints = {
        teamName(size:3..50,blank: false,unique: true)
    }

    static hasMany = [members:Member]

    String toString(){
        return teamName
    }


    static mapping = {
        table("TEAM")
    }
}


=====================================

Member.groovy

package webquick

class Member {

    Team team
    String name
    String gender = 'F'
    String address
    String email
    String phone
    static belongsTo = [Team]

    static constraints = {
        name(size: 3..20,blank: false,unique: true)
        email(email: true,blank: false)
        gender(inList: ["F","M"])
    }

    static mapping = {
        table("MEMBER")
    }
}


=====================================

原因:

Member属于Team,所以Member中存在Team的外键,并且team是Member的

一个变量,故team小写,程序会认成Member.team,不能写成类名,只能是类的一个变量

=====================================

拓展:

Team中的toString()方法作用:

    String toString(){
        return teamName
    }

--------------------------------------------

如果toString()方法改为:

    String toString(){
        return foundDate
    }


=====================================



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值