问题描述
在使用neo4j-ogm进行条件查询时,写了多个查询条件Filter,并将其全部添加到了Filters中,代码如下:
// 建立查询条件
filters.add(new Filter("chineseName", ComparisonOperator.LIKE, requestStaff.getChineseName()));
filters.add(new Filter("englishName", ComparisonOperator.LIKE, requestStaff.getEnglishName()));
filters.add(new Filter("gender", ComparisonOperator.LIKE, requestStaff.getGender()));
session.loadAll(StaffNode.class, filters);
但是当数量多于1个时就会报错
报错信息
org.neo4j.ogm.exception.core.MissingOperatorException:
BooleanOperator missing for filter with property name englishName.
Only the first filter may not specify the BooleanOperator.
报错原因
在查看了Filter类的源码后发现注释是这么写的:
/**
* The boolean operator used to append this filter to the previous ones.
* Mandatory if the filter is not the first and only filter in the list.
*/
private BooleanOperator booleanOperator = BooleanOperator.NONE;
翻译过来就是:用于将此筛选器附加到上一个筛选器的布尔运算符。如果筛选器不是列表中的第一个也是唯一一个筛选器,则为必填项。
再看上方我写的代码,好像是没有设置BooleanOperator
,那给他设置不就完了。
问题解决
先看了看有没有直接的构造方法,然鹅并没有发现(也可能是我大意了)
那就用setter方法呗,Filter
提供了一个setter
方法用于赋值:
public void setBooleanOperator(BooleanOperator booleanOperator) {
this.booleanOperator = booleanOperator;
}
所以将源代码修改为:
// 建立查询条件
filters.add(new Filter("chineseName", ComparisonOperator.LIKE,requestStaff.getChineseName() );
// 用于将此筛选器附加到上一个筛选器的布尔运算符。
// 如果筛选器不是列表中的第一个也是唯一一个筛选器,则BooleanOperator为必填项。
Filter filter = new Filter("englishName", ComparisonOperator.LIKE, requestStaff.getEnglishName() + '*');
filter.setBooleanOperator(BooleanOperator.AND);
filters.add(filter);
filter = new Filter("gender", ComparisonOperator.LIKE, requestStaff.getGender());
filter.setBooleanOperator(BooleanOperator.AND);
filters.add(filter);
session.loadAll(StaffNode.class, filters);
问题成功解决~