【发布时间】:2019-05-25 11:48:22
【问题描述】:
我按照本教程获取 Spring Data JPA 规范:https://dzone.com/articles/using-spring-data-jpa-specification
它为我实现了这一点,但我无法调用规范方法来搜索它们。我想把它们放在我的 SearchController 中:
public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
};
}
现在我想在我的 SearchController (SucheController) 中调用这个方法,但我不知道怎么做。 目前该方法如下所示: 苏车控制器:
public void search(String vorname, String nachname, String telefonnummer, String handynummer) {
telefonbuch.setVorname(vorname);
telefonbuch.setNachname(nachname);
telefonbuch.setTelefonnummer(telefonnummer);
telefonbuch.setHandynummer(handynummer);
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Telefonbuch> query = builder.createQuery(Telefonbuch.class);
Root<Telefonbuch> root = query.from(Telefonbuch.class);
List<Predicate> predicates = new ArrayList<Predicate>();
if (!vorname.isEmpty()) {
//eintraege = telefonbuchRepository.findAll(hasVorname()); -> does not work
Predicate condition = builder.like(builder.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
predicates.add(condition);
}
...
query.select(root).where(predicates.toArray(new Predicate[predicates.size()]));
【问题讨论】:
-
您必须使用 JPA 存储库。查看 CustomerRepository dzone.com/articles/using-spring-data-jpa-specification
-
我在“TelefonbuchRepository”中使用 JPA 存储库:公共接口 TelefonbuchRepository extends JpaRepository
-
但是你注释掉了这一行。什么不起作用?
-
SucheController 的方法未定义。我可以称它为 TelefonbuchSpecifications.hasVorname(...) 但不是别的。即使我这样称呼它,我也不知道如何像谓词一样使用它来拥有它的条件
标签: java spring spring-data-jpa jpa-criteria