Java 标准API JPA
我试图在Java web应用程序中实现自定义过滤器。 我想实现像这张照片一样的目标: 但设计更好:)) 基本上,我需要使用以下标准过滤数据: equal,not equal,like,为空,不为空,介于(日期)之间,大于,小于 所以出于我的原因,我决定使用CriteriaAPI。 我以前从未使用过criteria API,因此我正在阅读官方文档: 有这样的代码:Java 标准API JPA,java,hibernate,jpa,filter,filtering,Java,Hibernate,Jpa,Filter,Filtering,我试图在Java web应用程序中实现自定义过滤器。 我想实现像这张照片一样的目标: 但设计更好:)) 基本上,我需要使用以下标准过滤数据: equal,not equal,like,为空,不为空,介于(日期)之间,大于,小于 所以出于我的原因,我决定使用CriteriaAPI。 我以前从未使用过criteria API,因此我正在阅读官方文档: 有这样的代码: CriteriaQuery<Pet> cq = cb.createQuery(Pet.class); Metamode
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(cb.equal(pet.get(Pet_.name), "Fido")
.and(cb.equal(pet.get(Pet_.color), "brown");
CriteriaQuery cq=cb.createQuery(Pet.class);
元模型m=em.getMetamodel();
EntityType Pet=m.entity(Pet.class);
根pet=cq.from(pet.class);
cq.where(cb.equal(pet.get(pet.name),“Fido”)
和(cb.equal(pet.get(pet_.color),“brown”);
我对代码进行了更改,结果如下所示:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Client> cq = cb.createQuery(Client.class);
Root<Client> client = cq.from(Client.class);
cq.where(cb.equal(client.get("firstName"), "Fido").and(cb.like(client.get("lastName"), "brown")));
TypedQuery<Client> q = em.createQuery(cq);
List<Client> allClients = q.getResultList();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Client.class);
根客户端=cq.from(client.class);
其中(cb.equal(client.get(“firstName”),“Fido”)和(cb.like(client.get(“lastName”),“brown”));
TypedQuery q=em.createQuery(cq);
List allClients=q.getResultList();
但不幸的是,和
在我的代码中无法识别,编译会抛出错误
因此,我的问题是:
感谢在您的代码中,您正试图使用
谓词
对象中不存在的和方法,而您需要使用和与CriteriaBuilder
,如下所示:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Client> cq = cb.createQuery(Client.class);
Root<Client> client = cq.from(Client.class);
//Pass all conditions to CriteriaBuilder 'and'
Predicate predicate = cb.and(cb.equal(client.get("firstName"), "Fido"),
cb.like(client.get("lastName"), "brown"));
cq.where(predicate);
TypedQuery<Client> q = em.createQuery(cq);
List<Client> allClients = q.getResultList();
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Client.class);
根客户端=cq.from(client.class);
//将所有条件传递给CriteriaBuilder'和'
谓词=cb.and(cb.equal(client.get(“firstName”),“Fido”),
cb.like(client.get(“lastName”),“brown”);
cq.where(谓词);
TypedQuery q=em.createQuery(cq);
List allClients=q.getResultList();
另外,您可以参考CriteriaBuilder
的其他方法如何获取此类结果的计数?我希望能够创建分页,因此我需要获取查询结果的总计数,然后仅获取前15条记录。