【问题标题】:Hibernate createNativeQuery using IN clauseHibernate createNativeQuery 使用 IN 子句
【发布时间】:2023-04-09 03:45:02
【问题描述】:

使用 Java、Hibernate。

我有一个问题

String pixIds = "1,2,3";
String query = "SELECT * FROM comment WHERE PIX_ID IN (:pixIds)";
q.setParameter("pixIds", pixIds);
List<Object[]> results =  q.getResultList();

我无法使用上面的代码将此参数绑定到 pixIds。这样做的正确方法是什么?

注意:这里的查询是我实际查询的简化版本。

【问题讨论】:

    标签: java hibernate in-clause


    【解决方案1】:

    Hibernate 不支持在 SQL 查询中将集合绑定到 IN (...)

    您需要以与普通 JDBC 相同的方式工作:给定一个集合,在IN 子句中动态生成具有适当数量的?s 的查询,然后将该集合的元素绑定到?s。

    【讨论】:

    • 对不起,我错过了添加 pixId 是一个字符串而不是一个集合。编辑了我的原始帖子以包含更改。
    • @sammichy:完全一样:你需要创建三个?s,并通过单独的setParameter()调用将123绑定到它们。
    • 我已经尝试过了,它奏效了。但是编译后的 SQL 不会被重用,不是吗?这个查询用的比较多,所以想看看有没有更优化的。
    • @sammichy:没有比这更理想的了,这是准备好的语句的固有问题。
    【解决方案2】:

    以下方法有效
    公共查询 setParameterList(String name, Collection vals) 抛出 HibernateException

    【讨论】:

    • 原生查询没有这种方法。
    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2019-04-01
    • 1970-01-01
    • 2014-09-10
    • 2021-05-15
    相关资源
    最近更新 更多