gpt4 book ai didi

java - 标准 API JPA

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:47 25 4
gpt4 key购买 nike

我正在尝试在我的 Java 网络应用程序中实现自定义过滤器。我想实现类似这张照片的效果:

enter image description here

但有更好的设计:))

基本上我需要使用以下标准过滤数据:等于,不等于,like,is empty,not empty,between(Dates),大于,小于

因此,出于我的原因,我决定使用 Criteria API。我以前从未使用过标准 API,所以我正在阅读官方文档:

https://docs.oracle.com/cd/E19798-01/821-1841/gjixa/index.html

有这样的代码:

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");

我修改了我的代码,它看起来像这样:

    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();

但不幸的是 .and 在我的代码中无法识别并且编译会抛出错误。

所以我的问题是:

  1. 我是否选择了正确的数据过滤方法
  2. 我的代码有什么问题?

谢谢

最佳答案

在您的代码中,您正尝试使用 Predicate 对象中的 and 方法,该对象不存在,而您需要将 andCriteriaBuilder如下图:

        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的其他方法here .

关于java - 标准 API JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946552/

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