【问题标题】:java.lang.IllegalArgumentException: Name for parameter binding must not be null or emptyjava.lang.IllegalArgumentException:参数绑定的名称不能为空或空
【发布时间】:2020-10-02 04:44:26
【问题描述】:

我目前收到关于我的 jqpl 订购查询的错误:

Name for parameter binding must not be null or empty! On JDKs < 8, you need to use @Param for named parameters, on JDK 8 or better, be sure to compile with -parameters

我处于前一种情况,所以我需要使用@Param,但我不确定如何执行此操作。这是目前关于我的 JPQL 的情况:

@Query("SELECT p FROM DePerson p, DeClass c, DeSchool s" +
    "WHERE p.personId = c.id " +
    "AND su.schoolId = s.id " +
    "ORDER BY :ordering")
Page<DeSiteUser> orderingAll(Page page, String ordering, Pageable pageable);

所以很明显,我需要为我试图在排序字符串中传递的值实现@Param。我想要实现的是实现一种允许以下值的排序方法:

http://localhost:8080/api/person?sorting=city

要传递到查询中的值城市,然后根据该值对信息进行排序。在这种情况下,我将如何为我现有的 jpql 传递@Param 以使其能够 1. 工作但 2. 允许订购的能力。谢谢。

【问题讨论】:

    标签: java sql jpql


    【解决方案1】:

    使用@Param("ordering")

    @Query("SELECT p FROM DePerson p, DeClass c, DeSchool s" +
        "WHERE p.personId = c.id " +
        "AND su.schoolId = s.id " +
        "ORDER BY :ordering")
    Page<DeSiteUser> orderingAll(@Param("ordering") String ordering, Pageable pageable);
    

    【讨论】:

      【解决方案2】:

      如果您使用的 Java 版本高于 8,则必须将其粘贴到 Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler:

      -parameters
      

      在 gradle.build 中:

      compileJava {
          options.compilerArgs << '-parameters'
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 2020-04-04
        • 2020-06-02
        相关资源
        最近更新 更多