如何解读Specification.where

如何解读Spring boot jpa中Specification的如下方法:

static Specification where(@Nullable Specification spec) {

return spec == null ? (root, query, builder) -> null : spec;

}

有文字解释,这里只摘录代码部分。

Bard

Specification spec1 = new Specification() {

@Override

public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) {

return builder.equal(root.get("name"), "John Doe");

}

};

Specification spec2 = new Specification() {

@Override

public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder builder) {

return builder.greaterThan(root.get("age"), 21);

}

};

Specification spec = Specification.where(spec1).where(spec2);

List users = repository.findAll(spec);

这句Specification spec = Specification.where(spec1).where(spec2);明显错误。

ChatGPT

Specification spec1 = (root, query, builder) -> builder.lessThanOrEqualTo(root.get(Book_.PRICE), 100);

Specification spec2 = (root, query, builder) -> builder.like(root.get(Book_.ISBN), "%64%");

Specification spec = spec1.and(spec2);

List books = bookRepository.findAll(spec);

books.forEach(b -> log.debug("{}{-}", b.getIsbn(), b.getPrice()));

文心一言

List people = new ArrayList<>();

people.add(new Person("Alice", 25));

people.add(new Person("Bob", 20));

people.add(new Person("Charlie", 30));

List filteredPeople = new ArrayList<>();

Specification specification = Specification.where(builder -> builder.ge(Person::getAge, 18));

filteredPeople.addAll(people.stream().filter(specification).collect(Collectors.toList()));

也是有明显错误。

Bard、文心一言水平差不多,ChatGPT独领风骚。

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: