gpt4 book ai didi

java - 如何通过使用 Criteria API 将其子实体的属性列入白名单来选择 JPA 实体?

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:26 25 4
gpt4 key购买 nike

我遇到了以下假设问题:

使用Criteria API(而不是JPQL),并给定

  1. 满是用户的表格,每个用户都有多辆汽车

    @Entity 
    public class User {
    @Id
    private Long id;

    @OneToMany
    private Set<Car> cars;
    }
    @Entity 
    public class Car {
    @Id
    private Long id;

    private String model;
    }
  2. A Set<String>包含汽车模型:

    Set<String> models = getThousandsOfModels();

How can I select the Users having at least one Car whose model is in the models Set ?

我读过很多 SO 答案,尝试了不同的方法(最有希望的似乎涉及使用 Expression<Collection<String>> 创建谓词,使用 .in() 等)但没有任何效果。

最佳答案

下面的代码起到了作用:

Set<String> models = getHundredsOfModels(); 
if (models.size()>1000) throw new TooManyResultsException(); // Oracle limit

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cQuery = cb.createQuery(User.class);
Root<User> user = cQuery.from(User.class);
List<Predicate> predicates = new ArrayList<Predicate>();

// This lines are the trick ------------------------------------------
Join<User, Car> usersCars = user.join("cars", JoinType.INNER);
Predicate p = usersCars.<String>get("model").in(models);
// ---------------------------------------------------------------------

predicates.add(p);
cQuery.select(user).where(predicates.toArray(new Predicate[predicates.size()]));

关于java - 如何通过使用 Criteria API 将其子实体的属性列入白名单来选择 JPA 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33302322/

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