Grails,如何通过外键查找记录
Posted
技术标签:
【中文标题】Grails,如何通过外键查找记录【英文标题】:Grails, how to find by a record by its foreign key 【发布时间】: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] 的属性
关于如何完成此任务的任何建议?
谢谢 杰森
【问题讨论】:
【参考方案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,因此您不必担心任何事情。以上是关于Grails,如何通过外键查找记录的主要内容,如果未能解决你的问题,请参考以下文章
Grails createCriteria:通过作为空域类实例的字段查找对象
GORM 在 Grails 中使用 MongoDB 按 ID 获取/查找资源