【问题标题】:Can I use SQL's IN(...) statement for a namedQuery?我可以对 namedQuery 使用 SQL 的 IN(...) 语句吗?
【发布时间】:2011-05-28 05:50:12
【问题描述】:

如何在我的 namedQuery 中使用 IN?

@NamedQueries(  
 {   
 @NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN ('I want to define changeable size of an array or sometinhg like that') OR p.available = :available)")),  
 }

我的意思是我可以设置'type'参数(我将它定义为一个变量----> :type)并且我想在IN语句中定义变量。但是参数的数量不是恒定的。我想定义一个数组或类似的东西 :array[] 并且我想在调用 namedQuery 时设置它。

【问题讨论】:

    标签: java sql named-query


    【解决方案1】:

    命名查询

    @NamedQueries(  
    {   
     @NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",  
    }
    

    设置参数

    休眠

    query.setParameterList('availableCollection', yourCollection);
    

    JPA

    query.setParameter('availableCollection', yourCollection);
    

    【讨论】:

    【解决方案2】:

    你有没有尝试过类似的东西

    SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
    ('foo', 'bar') OR p.available = :available)
    

    (如果“可用”是一个字符串)

    SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
    (1, 2, 3) OR p.available = :available)
    

    (如果可用是一个数字)?

    【讨论】:

    • 在我的程序中,变量的数量是可变的,它可能是 (1, 2) 或 (1, 2, 3),这取决于。所以我应该为它定义像变量一样的数组。
    【解决方案3】:

    JPQL 中的表达式“IN”等于编写多个“OR”语句,在您的情况下,“IN”的示例是:

    ... p.available IN ('US', 'GB') ...
    

    我认为等于:

    ... p.available = 'US' OR p.available = 'GB' ...
    

    这里有一个很好解释的链接:OpenJPA: IN Expression

    编辑 附言假设 p.available 为 String(字符类型)

    EDIT2 作者已经多次编辑问题,我无法跟进他:) 至于关于为 IN 表达式传递数组的实际问题,这里是 StackOverflow 上类似问题的链接:JPQL IN clause - Arrays

    【讨论】:

    • 对不起 :) 但我想根据 cmets 让每个人都更清楚,所以我编辑它以明确我的问题 :)
    猜你喜欢
    • 2019-09-13
    • 2012-04-28
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2012-09-19
    • 2020-06-28
    相关资源
    最近更新 更多