有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我可以在(…)中使用SQL吗namedQuery的语句?

如何在我的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时设置它


共 (3) 个答案

  1. # 1 楼答案

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

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

    我认为这等于:

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

    这里有一个链接可以很好地解释:OpenJPA: IN Expression

    编辑 假设P.available为字符串(字符类型)

    EDIT2 作者多次编辑了这个问题,以至于我无法跟进:)至于关于在表达式中传递数组的实际问题,这里有一个关于StackOverflow的类似问题的链接:JPQL IN clause - Arrays

  2. # 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)
    

    (如果有,请提供一个号码)

  3. # 3 楼答案

    命名查询

    @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);