gpt4 book ai didi

Spring 规范 'and' 不起作用

转载 作者:行者123 更新时间:2023-12-04 23:53:14 25 4
gpt4 key购买 nike

你好!
我正在尝试在运行时为数据网格构建自定义过滤器。
我正在使用 spring boot 和 vaadin 8 进行数据展示。
Vaadin 知识与此问题无关。

我是怎么做的:
我为过滤器构建了一个哈希图。

private HashMap<String, Specification<ARInteraction>> interactionSpecifications =
new HashMap<>();

每个过滤器文本字段都会向 map 添加或删除规范:
TextField filterOwner = new TextField("Filter");
filterOwner.addValueChangeListener(nv -> {
if (StringUtils.isNotEmpty(nv.getValue())) {
interactionSpecifications.put("owner", ARInteractionSpecifications
.withOwnerEmail(nv.getValue()));
} else {
interactionSpecifications.remove("owner");
}
refreshContent();
});

当字段数据更改时,自定义规范会从规范映射中添加或替换(或删除)。

然后我调用刷新数据 View 内容,这会导致查询获取要运行的数据。

为了构建查询数据的规范,我只需通过在它们之间应用“与”操作来添加所有规范。
private Specification<ARInteraction> buildSpecification() {
// No specs
if (interactionSpecifications.isEmpty())
return null;

// Assembles all specs together
Specification<ARInteraction> ret = null;
for (Specification<ARInteraction> spec : interactionSpecifications.values()) {
if (ret == null) {
ret = Specification.where(spec);
} else {
ret.and(spec);
}
}
return ret;
}

我预期会发生什么 也就是说,在应用了两个过滤器的情况下,只有 符合两个规范被提取。

实际发生了什么是如果我单独设置状态规范(此处未显示)它会起作用,如果我设置所有者电子邮件过滤器它也起作用,但是如果我同时设置两者,则显示来自该所有者的所有交互 忽略状态过滤器 .

最佳答案

你好吗?

规范行为是不可变的,因此您应该使用 and 操作分配 ret 规范。
初学者错误。

for (Specification<ARInteraction> spec : interactionSpecifications.values()) {
if (ret == null) {
ret = Specification.where(spec);
} else {
ret = ret.and(spec); //Assign the ret so that specs are actually added.
}
}

关于 Spring 规范 'and' 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com