参数绑定的名称不能为null或空!对于命名参数,您需要在Java版本上使用@Param查询方法参数

前端之家收集整理的这篇文章主要介绍了参数绑定的名称不能为null或空!对于命名参数,您需要在Java版本上使用@Param查询方法参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这已经过去了,但我的问题有所不同.这是有问题的JPQL查询
@Query("SELECT NEW com.htd.domain.ShopOrder(po.id,po.po_number,"
            + "po.due_date,po_part.id,po_part.part_quantity,"
            + "part.id,part.part_number,part.part_description,"
            + "part.plasma_hrs_per_part,part.grind_hrs_per_part,"
            + "part.mill_hrs_per_part,part.brakepress_hrs_per_part) "
            + "FROM Po po "
            + "LEFT JOIN po.partList po_part "
            + "LEFT JOIN po_part.part part "
            + "LEFT JOIN po_part.part where po.id = :id")
    List<ShopOrder> getShopOrder(long id);

现在我试着做:

@Query("SELECT NEW com.htd.domain.ShopOrder(po.id,part.brakepress_hrs_per_part) "
            + "FROM Po po "
            + "LEFT JOIN po.partList po_part "
            + "LEFT JOIN po_part.part part "
            + "LEFT JOIN po_part.part where po.id = :id")
    List<ShopOrder> getShopOrder(@Param(value="id"));

但这给我一个警告说:

[ERROR] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].  
 [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in 
 context with path [] threw exception [Request processing Failed; nested   
 exception is org.springframework.dao.InvalidDataAccessApiUsageException: 
 Name for parameter binding must not be null or empty! For named parameters 
 you need to use @Param for query method parameters on Java versions < 8.; 
 nested exception is java.lang.IllegalArgumentException: Name for parameter 
 binding must not be null or empty! For named parameters you need to use 
 @Param for query method parameters on Java versions < 8.] with root cause
java.lang.IllegalArgumentException: Name for parameter binding must not be 
null or empty! For named parameters you need to use @Param for query method   
parameters on Java versions < 8.

正在执行查询方法是:

/**
     * Generate Shop Orders.
     */
    @RequestMapping(value = "/generateShopOrder/{id}",method = RequestMethod.PUT,produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    public void generate(@PathVariable Long id) throws URISyntaxException {
        System.out.println("po id to generate = " + id);

        List<ShopOrder> shopOrders = po_partRepository.getShopOrder(id);

        for(ShopOrder order: shopOrders) {
            System.out.println("-------Printing Shop Orders" + order);
        }

    }

建议吗?

———— UPDATE —————-

这似乎解决了这个问题:

@Query("SELECT NEW com.htd.domain.ShopOrder(po.id,part.brakepress_hrs_per_part) "
            + "FROM Po po "
            + "LEFT JOIN po.partList po_part "
            + "LEFT JOIN po_part.part part "
            + "LEFT JOIN po_part.part where po.id = ?1")
    List<ShopOrder> getShopOrder(Long id);

不过现在我有一个错误说:

[ERROR] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].
[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in 
context with path [] threw exception [Request processing Failed; nested 
exception is org.springframework.dao.InvalidDataAccessApiUsageException: 
org.hibernate.QueryException: could not instantiate class 
[com.htd.domain.ShopOrder] from tuple; nested exception is 
java.lang.IllegalArgumentException: org.hibernate.QueryException: could not 
instantiate class [com.htd.domain.ShopOrder] from tuple] with root cause
java.lang.IllegalArgumentException: null

ShopOrder:

public ShopOrder(long po_id,String po_number,LocalDate po_due_date,long po_part_id,int part_quantity,long part_id,String part_number,String part_decription,BigDecimal plasma_hrs,BigDecimal grind_hours,BigDecimal mill_hrs,BigDecimal breakpress_hrs) {

        this.po_id = po_id;
        this.po_number = po_number;
        this.po_due_date = po_due_date;
        this.po_part_id = po_part_id;
        this.part_quantity = part_quantity;
        this.part_id = part_id;
        this.part_number = part_number;
        this.part_decription = part_decription;
        this.plasma_hrs = plasma_hrs;
        this.grind_hours = grind_hours;
        this.mill_hrs = mill_hrs;
        this.breakpress_hrs = breakpress_hrs;

    }

解决方法

尝试这个参数描述:
List<ShopOrder> getShopOrder(@Param("id") long id);

猜你在找的Java相关文章