【问题标题】:Grails, how to find by a record by its foreign keyGrails,如何通过外键查找记录
【发布时间】:2011-10-21 01:04:16
【问题描述】:

我有两个域是一对多关系的一部分。我想知道如何向孩子查询父母 FK?下面是父/子的伪代码

家长:

    class AlumProfile    {
String firstName
String lastName
    static hasMany = [alumLanguage  : AlumLanguage]


static mapping = {
    cache true
    id generator: 'assigned'

    columns {
        firstName   type:'text'
        lastName    type:'text'
    }

    //
}
static constraints = {
    firstName   (nullable:true)
    lastName    (nullable:true)
    }

    }

孩子:

 class AlumLanguage {
String name
String level

static belongsTo = [alumProfile:AlumProfile]
static mapping = {
    cache true

    columns {
        name type:'text'
        level type:'text'
    }
}
static constraints = {
    name(nullable:true)
    level(nullable:true)
}
  }

虽然我没有显式创建 FK,但 grails 会自行创建 MySQL DB。但是,当我想像这样通过 FK 查询孩子时:

  if(AlumLanguage.findByNameAndAlumProfileId(language.'language'.toString(), 'jIi-hRi4cI')==null){
        //do something
 }  

我收到一个错误:找不到类 [class mgr.AlumLanguage] 的名称 [alumProfileId] 的属性

关于如何完成此任务的任何建议?

谢谢 杰森

【问题讨论】:

    标签: hibernate grails grails-domain-class grails-controller


    【解决方案1】:

    尝试使用criteria

    def c = AlumLanguage.createCriteria()
    def languages = c.get {
        eq('name', 'whatever-language')
        alumProfile {
            eq('id', 'jIi-hRi4cI')
        }
    }
    

    【讨论】:

    • 这会返回一个列表。我需要返回 AlumLanguages 对象,以便我可以编辑/删除它的实例
    • 已更新。但是,如果您打算这样做,您可能希望将 AlumProfile.alumLanguage 声明为 Set 以强制执行唯一成员。
    • 谢谢,成功了!出于好奇,“将 AlumProfile.alumLanguage 声明为集合”是什么意思?再次感谢!
    • @jason - 实际上,请忽略该声明。我不确定我在想什么。无论如何,默认情况下它是一个 Set,因此您不必担心任何事情。
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多