Grails:在域未直接匹配时编写HQL查询

时间:2013-07-04 18:41:03

标签: grails hql

我有一个名为Logging的域类,它存储另一个域类的ID:Organization 提供两个域的结构:

class Logging {
   Date dateCreated
   long user_id
   long organization_id
   String memberCode

   static constraints = {
      user_id(nullable: false)
      organization_id(nullable: false)
      memberCode(nullable: true)
   }
}

class Organization {
   Type type
   String name
   String memberCode
   User manager
   String collateralAutoEmails
   boolean isBlocked = true

   static constraints = {
      name(blank: false, unique: true)
      manager(nullable: true)
      memberCode(nullable: true)
      collateralAutoEmails(nullable: true)
   }

   static mapping = {
      manager(lazy: false)
   }
}

用户输入几个参数:dateCreated,memberCode和组织名称。我需要选择匹配这些标准的Logging域中的所有元素 对我来说,棘手的部分是编写组织参数名称的查询。 根据搜索规则,我应该检查organization.name字段是否包含用户输入的数据作为子字符串(case insensetive)并从Logging域中选择相应的元素。
这两个域没有直接映射,我无法加入这些表。我尝试了不同的方法,但仍未找到解决方案。

2 个答案:

答案 0 :(得分:2)

你去吧

Logging.executeQuery("Select l from Logging l, Organization o where l.organization_id = o.id and o.dateCreated = :dateCreated and o.memberCode = :memberCode and o.name = :name", [dateCreated: dateCreated, memberCode: memberCode, name: name])

答案 1 :(得分:0)

尝试这样的事情:

Organization.executeQuery("select o from Organization o, Logging l where o.name like = :orgName AND o.id=l.organization_id", [orgName : orgName ])

我没有尝试过,如果它有效,那么可以在查询中添加更多搜索选项,并且还可以在参数上添加%,以增强搜索。