【问题标题】:Hibernate - where clause any with collection as a named parameter queryHibernate - where 子句任何与集合作为​​命名参数查询
【发布时间】:2017-04-13 10:00:32
【问题描述】:

我想知道是否可以使用集合进行这种评估,例如查询在我的项目中的一个名为 query 的类中不起作用,如下所示:

@NamedQueries(value = {  
@NamedQuery(
name = "Foo.getBarList", 
query = "select f from Foo f where (:barlist is null or f.barlist.id in (:barslist)) " )})

来自这两个帖子:

FROM Foo WHERE Id = :id AND (:barlist is null or Bar in (:barlist)) JPA where clause any

Hibernate HQL Query : How to set a Collection as a named parameter of a Query?

我猜问题是查询中的 id,所以我删除并停止错误,只需更改此:
"select f from Foo f where (:barlist is null or f.barlist in (:barslist)) "

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    您可以检查而不是在 HQL 中

    if(barlist==null){
        //query=FROM Foo WHERE Id = :id
    }else{
       //query=FROM Foo WHERE Id = :id AND Bar in :barlist
       // query.setParameterList(:barlist",<list object>)
    }
    

    【讨论】:

    • 感谢您指出一个方法,但我将以 2 个命名查询结束,例如:@NamedQueries(value = { @NamedQuery(name = "Foo.get", query = "select e from Foo e " + " where (:id is null or e.id = :id) " ), @NamedQuery(name = "Foo.getBarList", query = "select e from Foo e " + " where (:id is null or e.id = :id) " + " and (:barlist is null or e.barlist.id in (:barslist)) " )}),如果还有其他情况,DAO 代码将处理策略。
    • DAO 代码将处理一个策略,如果还有其他的,就像:Session session = sessionFactory.openSession(); String sql = ""; if(f.getBarList().isEmpty()) sql = "Foo.get"; else sql = "Foo.getBarList"; Query query = session.getNamedQuery(sql); if(!f.getBarList().isEmpty()) query.setParameterList("barlist", f.getBarList());
    • 你也可以试试这个来检查查询中是否有参数..docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/…
    猜你喜欢
    • 2010-10-08
    • 2015-04-14
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多