grails - 通过字段A进行查询,如果字段B不为null,则也通过字段B查询HQL grails

标签 grails hql

所以我有这个查询:

"from ProductLookupNumber pln left join pln.creator as creator
where (pln.searchNumber like '%" + query + "%') 
or (creator is not null and creator.name like '%" + query + "%')"

我正在使用grails,但是由于某种原因,无论我在提交查询变量的输入字段中写什么,它都会返回空。

下一个查询工作正常。但是我无法按创建者的名字进行过滤:
from ProductLookupNumber pln where (pln.searchNumber like '%" + query + "%')

此其他查询将筛选所有没有创建者的记录:
"from ProductLookupNumber pln " +
"where (pln.searchNumber like '%" + query + "%') " +
"or (pln.creator is not null and pln.creator.name like '%" + query + "%')"

问题是某些ProductLookupNumber记录可以具有一个空创建者,这是一个不同的实例。因此,当我提交查询时,我希望它查找所有具有搜索号String或IF的记录(如果它们有创建者),如果创建者的名称与提交的变量匹配,则包括它们。

更新:

因此,我有一个包含这些记录的表:

搜索号码|创作者|

123个|本田|

12345的| MITSU |

45的| NULL |

我有一个搜索栏,如果输入:12,然后单击我要显示的内容:

搜索号码|创作者|

123个|本田|

12345的| MITSU |

如果我输入本田,则:

搜索号码|创作者|

123个|本田|

如果我输入45,则:

搜索号码|创作者|

12345的| MITSU |

45的| NULL |

谢谢

最佳答案

我对它的工作方式不满意。但是我至少得到了想要的实例列表:

def where_query = ProductLookupNumber.where {
    searchNumber =~ "%${query}%" || creator.name =~ "%${query}%"
}
def list = where_query.list()
def list2 = criteria.list {
    isNull('creator')
    like("searchNumber", "%${query}%")
}
list.addAll(list2)

关于grails - 通过字段A进行查询,如果字段B不为null,则也通过字段B查询HQL grails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41473053/

相关文章:

date - Grails-字符串到日期的转换

grails - if(var) fn(var) 的常规方法

java - 从 Gradle Build 中排除模块/传递依赖项

java - 使用 HQL 和单独的 IdClass 进行复合键查询

grails - Groovy/Grails 项目运行报错

unit-testing - 如何在(Spock,Grails)单元测试Taglib中模拟渲染?

java - 选择 HQL 中不是父级的类别

java - HQL 中的日期限制

java - HQL如何查询String的ElementCollection

java - 如何编写 Hibernate HQL 查询来删除所有 "grand children"元素?