当前位置: 首页 > 面试题库 >

使用ParameterExpression作为In子句的一部分

牟恺
2023-03-14
问题内容

我想将参数表达式用作in子句的一部分。我想查询在一组Bar中具有Bar的Foos列表。这可能吗?

Foo
    // Join, ManyToOne
    Bar getBar()

Query
    ParameterExpression<???> barParameter;

    void setup() {
        CriteriaBuilder builder = ...
        CriteriaQuery<Foo> criteria = ...
        Root<Bar> root = ...

        barParameter = builder.parameter(???);

        criteria.where(
            builder.in(root.get(Foo_.bar)).value(barParameter)
        );
    }

    List<Foo> query(Set<Bar> bars) {
        TypedQuery<Foo> query = createQuery();
        query.setParameter(barParameter, bars);
        return query.getResultList();
    }

问题答案:

使用in表达式时,您只能使用基本比较类型,因此您需要进行联接并比较基本类型的字段(在此我已经使用过Integer id):

Root<Foo> foo = cq.from(Foo.class);
Join<Foo, Bar> bar = foo.join(Foo_.bar);
ParameterExpression<Collection> bars = cb.parameter(Collection.class);
cq.where(bar.get(Bar_.id).in(bars));
TypedQuery<Foo> tq = em.createQuery(cq);
Collection<Integer> barsParameter = new ArrayList<Integer> ();
barsParameter.add(1);
List<Foo> resultList = tq.setParameter(bars, barsParameter).getResultList();


 类似资料:
  • 如何使用hibernateTemplate执行批量更新操作。下面的代码抛出 原因:org。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:2 如何通过将用户列表作为参数传递来实现此批量更新操作???

  • 问题内容: 我在网站上列出了商品。每个项目都有几个附加的类别,我们称这些类别为电影流派。在高级搜索中,我让人们选中他们喜欢的类型的复选框,它弹出与所选任何类型匹配的电影列表。 我有这样的查询: 这里的问题是,如果您选择“动画”和“恐怖”,则会得到一堆迪斯尼卡通(“动画”)和SAW系列(“恐怖”)。 我想将搜索范围包括在内,因此它只会返回与所有选定流派都匹配的结果,因此将同时标记为“动画”和“恐怖”

  • 主要内容:Oracle IN操作符介绍,Oracle IN运算符示例,以下是纠正/补充内容:在本教程中将学习如何使用Oracle 运算符来确定值是否与列表或子查询中的任何值相匹配。 Oracle IN操作符介绍 Oracle 运算符确定值是否匹配列表或子查询中的任何值。 注:子查询是嵌套在另一个查询中的查询,可通过在子查询教程中了解子查询用法。 确定表达式是否与值列表匹配的Oracle 运算符的语法如下所示: 并且表达式的语法与子查询匹配: 参数 在上面语法中,这里将介绍每个参数含义:

  • 问题内容: 我正在尝试在sqlalchemy中执行此查询 我想在执行时绑定列表。 问题答案: 怎么样 编辑 :没有ORM,它将是 需要两个参数,第一个是要检索的字段列表,第二个是条件。您可以通过(或)属性访问表对象上的所有字段。

  • 问题内容: 在SQL中,有什么方法可以缩短语法 到 一次又一次地在子句中写入相同的列名是不可行的。 问题答案: 没有没有办法将LIKE与IN 直接 结合 __ 有很多解决方法,例如本例中的SQL Server 这会将多个OR搜索条件更改为行和JOIN 或者,您可以使用UNION将多个查询合并为一个

  • 问题内容: 使用Java,hibernate。 我有一个查询 我无法使用上面的代码将此参数绑定到pixIds。什么是正确的方法? 注意:这里的查询是我的实际查询的简化版本。 问题答案: 以下方法适用于 公共查询setParameterList(String name,Collection vals)引发HibernateException