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