我有一个名为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域中选择相应的元素。
这两个域没有直接映射,我无法加入这些表。我尝试了不同的方法,但仍未找到解决方案。
答案 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 ])
我没有尝试过,如果它有效,那么可以在查询中添加更多搜索选项,并且还可以在参数上添加%,以增强搜索。