所以我有这个查询:
"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/