Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql In子句中的一对条件列表_Mysql_Jpa_Spring Data Jpa - Fatal编程技术网

Mysql In子句中的一对条件列表

Mysql In子句中的一对条件列表,mysql,jpa,spring-data-jpa,Mysql,Jpa,Spring Data Jpa,在一个表中,我需要通过在成对值列表中应用和条件来获取分页记录,下面是解释 假设我有一个类billofling,其中有各种字段 表中的两个重要字段是 租户 billtype 我有一个包含以下值的对的列表: [ {`tenant1`, `billtype1`}, {`tenant2`, `billtype2`}, {`tenant3`, `billtype3`}, .... ] 我需要一个JPA查询,在那里获取类似 FindByteNantAndBillTypeOrte

在一个表中,我需要通过在成对值列表中应用和条件来获取分页记录,下面是解释

假设我有一个类
billofling
,其中有各种字段 表中的两个重要字段是

  • 租户
  • billtype
  • 我有一个包含以下值的对的列表:

    [
       {`tenant1`, `billtype1`},
       {`tenant2`, `billtype2`},
       {`tenant3`, `billtype3`},
       ....
      ]
    
    我需要一个JPA查询,在那里获取类似 FindByteNantAndBillTypeOrtenantAndBillTypeOrter

    在简单的sql查询中,如下所示

    Select * from `Billoflading` where 
    `tenant` = 'tenant1' and billtype = 'billtype1'
    OR `tenant` = 'tenant2' and billtype = 'billtype2'
    OR `tenant` = 'tenant3' and billtype = 'billtype3'
    OR ......... so on..
    
    我试着编写一个JPA查询,如下所示

    Page<Billoflading> findByTenantInAndBillTypeIn(List<String> tenants, List<String> billTypes, Page page);
    
    Page findbyteantinandbilltypein(列出租户,列出账单类型,第页);
    
    但这也有交叉记录 i、 e它给出了租户1和billtype2、benant2和BillType3等的记录。。。结果集中不需要的

    谁能解决这个问题,帮我找到一个简单的解决方案,比如

    Page<Billoflading> findByTenantAndBillTypeIn(Map<String, String> tenantsAndBilltyes, Page page);
    
    Page findbytenannandbilltypein(映射租户和账单类型,第页);
    
    我也为JPA中的本机查询做好了准备,我所需要的是不应该有交叉,因为这是一个非常敏感的数据

    我的另一个解决方法是获取记录并应用java 8过滤器,这是可行的,但页面中的记录数量减少了

    第4.6.9节明确指出,JPQL不支持这一点,至少不支持in子句的形式:

    表达式中的4.6.9 在条件表达式中使用比较运算符[NOT]的语法如下:

    in_expression ::=
        {state_valued_path_expression | type_discriminator} [NOT] IN
        { ( in_item {, in_item}* ) | (subquery) | collection_valued_input_parameter } 
    
    in_item ::= literal | single_valued_input_parameter
    
    状态值路径表达式必须具有字符串、数字、日期、时间、时间戳或枚举值

    文字和/或输入参数值必须与类型中的状态\值\路径\表达式的抽象架构类型相同。(见第4.12节)

    子查询的结果必须与类型中状态值路径表达式的抽象模式类型相同

    它只是对元组不起作用


    您最好的选择可能是创建一个
    规范
    ,以构建所需的
    以及
    的组合。请参见

    谢谢您的建议,我将尝试使用标准列表以及标准内的列表,不过有一个简短的问题,您是推荐标准列表还是标准内的列表?提前感谢对不起,我不明白你对这两个选项的意思。哦,很抱歉误解,标准的解决方案正在发挥作用,我能够找到想要的结果,感谢你所有的时间和宝贵的投入