gpt4 book ai didi

java - 如何在 JPA 中使用规范

转载 作者:行者123 更新时间:2023-12-02 03:18:41 24 4
gpt4 key购买 nike

我正在我的应用程序中实现搜索功能。我在 findAll() 中使用规范,它工作得很好。但是,当我尝试使用 findByFirstName() 等其他方法实现目标时,它不起作用

我包括了到目前为止我所做的事情。

AircraftSpecification.java

public class AircraftSpecification {

private AircraftSpecification() {}

public static Specification<Aircraft> textInAllColumns(String text) {

if (!text.contains("%")) {
text = "%"+text+"%";
}
final String finalText = text;

return new Specification<Aircraft>() {
private static final long serialVersionUID = 1L;

@Override
public Predicate toPredicate(Root<Aircraft> root, CriteriaQuery<?> cq, CriteriaBuilder builder) {
List<SingularAttribute<Aircraft, ?>> tempAttributes = new ArrayList<>();
for (SingularAttribute<Aircraft, ?> attribute : root.getModel().getDeclaredSingularAttributes()) {
if (attribute.getJavaType().getSimpleName().equalsIgnoreCase("string")) {
tempAttributes.add(attribute);
}
}

final Predicate[] predicates = new Predicate[tempAttributes.size()];

for (int i = 0; i < tempAttributes.size(); i++) {
predicates[i] = builder.like(builder.lower(root.get(tempAttributes.get(i).getName())), finalText.toLowerCase());
}
return builder.or(predicates);
}
};
}
}

当我打电话时

aircraftRepository.findAll(Specification.where(AircraftSpecification.textInAllColumns(searchText)));

它给了我正确的数据。

但是当我打电话时

aircraftRepository.findAllByName(name, Specification.where(AircraftSpecification.textInAllColumns(searchText)));

它抛出异常。

异常(exception)是:

org.springframework.dao.InvalidDataAccessApiUsageException: At least 2 parameter(s) provided but only 1 parameter(s) present in query.; nested exception is java.lang.IllegalArgumentException: At least 2 parameter(s) provided but only 1 parameter(s) present in query.

任何人都可以帮助我如何使用 findAll 方法以外的规范。

最佳答案

您不能将 Spring Data 从方法名称派生要执行的查询与规范结合起来。只需将查询的名称部分也设为Specification,然后用 and 将两者组合起来即可。

生成的调用可能如下所示或类似:

aircraftRepository.findAll(
byName("Alfred")
.and(textInAllColumns(searchText))
);

关于java - 如何在 JPA 中使用规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942688/

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