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

标签 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 :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 条件中使用的所有其他属性不为空

更新:

另请查看此链接 Prepared statement IN clause您需要使用 setArray() 方法代替 setParameter() 并使用数组

关于java - JPQL - (JPA) ORA-00920 : invalid relational operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42482549/

相关文章:

hibernate - JPA、 hibernate : Persist through multiple levels

mysql - Hibernate 不关闭 MySql 连接

java - org.eclipse.persistence.exceptions.ValidationException : Cannot add a query whose types conflict with an existing query

java - JPQL:EclipseLink 和 Hibernate 之间的区别

java - Spring Rest 模板覆盖 Authorization header 值

java - Android:重写更高 API 级别的方法

hibernate - JPA( hibernate )+ Spring : Dealing with unique constraint violations

java - 如何在 spring data jpa 中为自定义采石场提供可变参数而不使用 for 循环

java - Apache Flink Channel 在完成当前部分记录之前收到一个事件

java - 如何在 Linux 作为操作系统的 FAT32 分区上运行 Java?