如何编写这个Grails GORM Hibernate查询

时间:2013-09-10 16:57:40

标签: hibernate grails gorm

GORM新手,无法想象如何进行此查询。这是我的域类(减去不必要的信息):

User {...} //domain object (from springsecurity)

BasicProfile {
   User user
   static hasMany = [applicants:Applicant]
}

Applicant {
   static belongsTo = BasicProfile
   int applicantNumber
}

我的BasicProfile将始终有1或2个申请人。现在我正在使用hasMany,虽然我可能会在以后的BasicProfile中改用applicant1和applicant2。

我想在伪sql中得到什么:

从BasicProfile中选择申请人对象,其中applicantNumber = 1,BasicProfile.user.id == springSecurityService.principal.id

基本上我是在尝试从BasicProfile获取一个Applicant对象,给定会话用户和applicantNumber。

2 个答案:

答案 0 :(得分:2)

这个怎么样?

User user = User.load(springSecurityService.principal.id)
def applicant = BasicProfile.findByUser(user)
                            .applicants?.find{it.applicantNumber == 1}

Burt's answer的启发并使用dynamicFinders。

答案 1 :(得分:1)

您可以尝试:

User user = User.get(...) //get's the user instance
BasicProfile.createCriteria().get {
  eq('user', user)
  applicants {
    eq('applicantNumber', 1) //filter by applicantNumber
  }
}