我有两个java对象。
用户(每个用户都有一个索引列)
地址(每个地址也都有一个user_index
列)
我有一个所有用户索引列表的列表,作为给定输入usersIndexList
,我想基于此usersIndexList
获取所有地址对象。我在另一个线程上找到了一个例子。并尝试遵循它,但是它不起作用。
JPA CriteriaBuilder - How to use "IN" comparison operator
我的代码:
List<String> usersIndexList= new ArrayList<String> ();
for (User u : usersList) {
usersIndexList.add(u.getIndex());
}
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<User> subQuery = criteriaBuilder.createQuery(User.class);
Root<User> fromUser= subQuery.from(User.class);
Expression<String> exp = fromUser.get("user_index");
Predicate predicate = exp.in(usersIndexList);
subQuery.where(predicate);
TypedQuery<User> query = getEntityManager().createQuery(subQuery);
return query.getResultList();
但是此查询未返回期望的结果:(
有人可以告诉我我做错了什么吗,或者可以通过
nativequery
或namedquery
或其他任何方式给我替代解决方案 最佳答案
根据您的问题,您想基于此usersIndexList
获取所有地址对象。但是在您的代码中,您选择的是User
对象,而不是Address
。我的理解正确吗?如果是,则将您的根目录更改为Address
,如下所示-
List<String> usersIndexList= new ArrayList<String> ();
for (User u : usersList) {
usersIndexList.add(u.getIndex());
}
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Address> subQuery = criteriaBuilder.createQuery(Address.class);
Root<Address> fromAddress= subQuery.from(Address.class);
Expression<String> exp = fromAddress.get("user_index");
Predicate predicate = exp.in(usersIndexList);
subQuery.where(predicate);
TypedQuery<Address> query = getEntityManager().createQuery(subQuery);
return query.getResultList();