我有一个Entity类,其中包含5个参数,名称,家庭,电子邮件,地址,年龄。逐个或成组搜索这些内容应该是动态的。在这种情况下,如果我想独自编写,则会占用整个空间。如何向他们写入动态队列?
@Repository
public interface MyRepository extends JpaRepository<MyEntity1, Long> {
Page<DirectTopup> findAllByName(Pageable pageable, String name);
Page<DirectTopup> findAllByNameAndFamily(Pageable pageable, String name, , String family);
Page<DirectTopup> findAllByNameAndFamilyAndEmail(Pageable pageable, String name, , String family, String email);
...
Page<DirectTopup> findAllByNameAndFamilyAndEmail(Pageable pageable, String name, , String family, String email, String address, int age)
}
对于每个可能的呼叫,参数是Zer和Nal或根本没有。 请指教
if (name != null && family == null && email == null && address == null && age ==null){
myRepository.findAllByName(new PageRequest(page, size, direction, propertie), name);
}
if (name == null && family != null && email == null && address == null && age ==null){
myRepository.findAllByFamily(new PageRequest(page, size, direction, propertie), family);
}
...和所有参数
所有单独的值都分开。
if (name != null && family != null && email != null && address == null && age ==null){
myRepository.findAllByNameAndFamilyAndEmail(new PageRequest(page, size, direction, propertie), name, family, email);
}
....
并组合它们(多个参数):
并且可能是参数的组合
答案 0 :(得分:0)
在这种情况下,您可以使用规格界面。 浏览此link
一旦您通过上面的链接,然后使用此谓词 要动态过滤列,请使用以下谓词:
@Override
public Predicate toPredicate(Root<MyEntity1> root, CriteriaQuery<?> query, CriteriaBuilder cb)
{
List<Predicate> predicates = new ArrayList<Predicate>();
if(StringUtils.isNotEmpty(name))
{
predicates.add(cb.like(cb.lower(root.get("name")), "%"+name.toLowerCase()+"%"));
}
if(StringUtils.isNotEmpty(family))
{
predicates.add(cb.like(cb.lower(root.get("family")), "%"+family.toLowerCase()+"%"));
}
return cb.and(predicates.toArray(new Predicate[] {}));
}
此example也将有所帮助。