Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA CriteriaQuery-如何在比较运算符中使用_Java_Hibernate_Jpa_Hibernate Criteria_Predicate - Fatal编程技术网

Java JPA CriteriaQuery-如何在比较运算符中使用

Java JPA CriteriaQuery-如何在比较运算符中使用,java,hibernate,jpa,hibernate-criteria,predicate,Java,Hibernate,Jpa,Hibernate Criteria,Predicate,我有两个java对象 用户(每个用户都有一个索引列) 地址(每个地址也有一个用户索引列) 我有一个包含所有用户索引列表的列表,usersIndexList作为给定的输入,我想根据这个usersIndexList获取所有地址对象。我在另一个线程上找到了一个示例。并试图遵循它,但它不起作用 我的代码: List<String> usersIndexList= new ArrayList<String> (); for (User u : usersList) { u

我有两个java对象

  • 用户(每个用户都有一个索引列)
  • 地址(每个地址也有一个
    用户索引
    列)
  • 我有一个包含所有用户索引列表的列表,
    usersIndexList
    作为给定的输入,我想根据这个
    usersIndexList
    获取所有地址对象。我在另一个线程上找到了一个示例。并试图遵循它,但它不起作用

    我的代码:

    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();
    
    List usersIndexList=newarraylist();
    for(用户u:usersList){
    usersIndexList.add(u.getIndex());
    }
    CriteriaBuilder CriteriaBuilder=getEntityManager().getCriteriaBuilder();
    CriteriaQuery子查询=criteriaBuilder.createQuery(User.class);
    Root-fromUser=subQuery.from(User.class);
    表达式exp=fromUser.get(“用户索引”);
    谓词=exp.in(usersIndexList);
    where(谓词);
    TypedQuery query=getEntityManager().createQuery(子查询);
    返回query.getResultList();
    
    但此查询未返回所需的结果:(

    有人能告诉我,我哪里做错了,或者如果可能的话,通过
    nativequery
    namedquery
    或任何其他方式给我一个替代的解决方案吗?

    根据你的问题,你想根据这个
    usersIndexList
    获取所有地址对象。但是在你的代码中你选择了e> 用户对象,而不是
    地址
    。我的理解正确吗?如果正确,请将根目录更改为
    地址
    ,如下所示-

    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();
    
    List usersIndexList=newarraylist();
    for(用户u:usersList){
    usersIndexList.add(u.getIndex());
    }
    CriteriaBuilder CriteriaBuilder=getEntityManager().getCriteriaBuilder();
    CriteriaQuery子查询=criteriaBuilder.createQuery(Address.class);
    Root-fromAddress=subQuery.from(Address.class);
    表达式exp=fromAddress.get(“用户索引”);
    谓词=exp.in(usersIndexList);
    where(谓词);
    TypedQuery query=getEntityManager().createQuery(子查询);
    返回query.getResultList();
    
    有关答案,请参考答案的链接。请参考您的查询格式正确的链接。您能解释一下
    是什么意思吗?但是此查询没有返回所需的结果