Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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
Java JPQL-(JPA)ORA-00920:无效的关系运算符_Java_Jpa_Jpql_Java Ee 7 - Fatal编程技术网

Java JPQL-(JPA)ORA-00920:无效的关系运算符

Java JPQL-(JPA)ORA-00920:无效的关系运算符,java,jpa,jpql,java-ee-7,Java,Jpa,Jpql,Java Ee 7,如果为空,则查询正在工作。。。否则当填写所有列表参数时,查询将不起作用。。。有什么帮助吗?您的问题是在使用 List<InvTrnTransactionHeader> list = em.createQuery("SELECT p FROM InvTrnTransactionHeader p WHERE p.warehouse.warehouseCode IN :warehouseCode And (p.issueToWarehouseId IN :issuedWhId OR :is

如果为空,则查询正在工作。。。否则当填写所有列表参数时,查询将不起作用。。。有什么帮助吗?

您的问题是在使用

List<InvTrnTransactionHeader> list = em.createQuery("SELECT p FROM InvTrnTransactionHeader p WHERE p.warehouse.warehouseCode IN :warehouseCode And (p.issueToWarehouseId IN :issuedWhId OR :issuedWhId is null ) And ( p.invTrnTransactionHeaderPK.transactionId IN :transactionCode OR :transactionCode is null ) And (p.vendorId IN :vendorId OR :vendorId is null) And p.invTrnTransactionHeaderPK.transactionDocumentDate >=:fromDate And p.invTrnTransactionHeaderPK.transactionDocumentDate <=:toDate And (p.invTrnTransactionHeaderPK.transactionDocumentNumber >=:fromDocument  OR :fromDocument is null) And (p.invTrnTransactionHeaderPK.transactionDocumentNumber <=:toDocument  OR :toDocument is null) And (p.vendorInvoiceNumber >=:fromInvoice  OR :fromInvoice is null) And (p.vendorInvoiceNumber <=:toInvoice  OR :toInvoice is null)")
           .setParameter("warehouseCode", warehouseCode)
           .setParameter("issuedWhId", issuedWhId)
            .setParameter("transactionCode", transactionId)
            .setParameter("vendorId", vendorId)
            .setParameter("fromDate", fromDate)
            .setParameter("toDate", toDate)
            .setParameter("fromDocument", fromDocument)
            .setParameter("toDocument", toDocument)
            .setParameter("fromInvoice", fromInvoiceNum)
            .setParameter("toInvoice", toInvoiceNum)
            .getResultList();
如果变量warehouseCode为空,则JPA会将SQL转换为不带元素的IN,并且是错误的SQL结构

要修复它,您需要确保属性warehouseCode以及在in条件中使用的所有其他属性都不是空的

更新:


另外,请查看此链接您需要使用setArray方法代替setParameter并使用数组

是否将此控件添加到代码中?我正在添加它。。。我应该检查所有参数是否不为空,对吗?您应该检查与列表相关的所有参数,以及您使用的关键字中的哪些参数不为空,如果它们为空,请不要添加到查询库以获取帮助。。我试过了,但仍然不起作用。你能粘贴SQL语句吗?也许我可以看到一些错误,我已经在我的bean中做了,但这并没有解决问题。使用show_sql=true的属性,您将看到sql是如何构建的,然后您可以执行并检查问题,我得到了相同的结果。但现在可能不同了,请更好地检查SQL语句
WHERE p.warehouse.warehouseCode IN:warehouseCode