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

JPQL - (JPA) ORA-00920: invalid relational operator

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

如果是 null 情况,则查询有效...否则何时填充所有列表参数查询无效...有帮助吗?

你的问题是当你使用

WHERE p.warehouse.warehouseCode IN:warehouseCode

任何 IN 运算符,然后如果变量 warehouseCode 为空,JPA 会将 SQL 转换为 IN ( ) 没有元素并且是错误的 SQL 结构。

要修复它,您需要确保属性 warehouseCode,并且您在 IN 条件中使用的所有其他属性都不为空

更新:

另请查看此 link Prepared statement IN clause 您需要使用 setArray() 方法代替 setParameter() 并使用 Array