【问题标题】:Hibernate HQL Query : How to set a Collection as a named parameter of a Query?Hibernate HQL 查询:如何将集合设置为查询的命名参数?
【发布时间】:2010-10-08 21:16:16
【问题描述】:

给定以下 HQL 查询:

FROM
    Foo
WHERE
    Id = :id AND
    Bar IN (:barList)

我使用 Query 对象的 setInteger() 方法设置了 :id

我想使用List 对象设置:barList,但是查看Hibernate 文档和方法列表,我看不到使用哪个明显的选择。有什么想法吗?

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    使用Query.setParameterList()Javadoc here

    有四种变体可供选择。

    【讨论】:

    • 感谢您指出这一点!在查看 JavaDoc 时,我完全忽略了这一点。
    • D:哦,不,链接断开(...JBoss 文档的典型特征)
    • 这仅在您使用休眠查询对象时有效,但如果您导入 javax.persistence.Query 则无效。只是我的两分钱。
    【解决方案2】:

    我不确定 HQL,但在 JPA 中,您只需使用参数和集合调用查询的 setParameter

    Query q = entityManager.createQuery("SELECT p FROM Peron p WHERE name IN (:names)");
    q.setParameter("names", names);
    

    names 是您要搜索的名称集合

    Collection<String> names = new ArrayList<String();
    names.add("Joe");
    names.add("Jane");
    names.add("Bob");
    

    【讨论】:

      【解决方案3】:

      TorpedoQuery 中看起来像这样

      Entity from = from(Entity.class);
      where(from.getCode()).in("Joe", "Bob");
      Query<Entity> select = select(from);
      

      【讨论】:

      • 如何回答这个问题?如果他们没有直接解决问题,请不要发布指向您项目的链接。
      • 它生成一个带有 in 条件的 hql 查询
      猜你喜欢
      • 2011-12-07
      • 1970-01-01
      • 2013-06-10
      • 2017-04-13
      • 2012-02-08
      • 2011-05-29
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多