Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

This has been posted before but my issue is a little different. This is the JPQL query in question:

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

Now I did try to do:

@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(@Param(value="id")); 

But this giving me a warning saying:

    [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. 

The method that is executing the query is:

 /**      * 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);         }      } 

Advice?

------------UPDATE----------------

This seemed to fix the issue:

@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 = ?1")     List<ShopOrder> getShopOrder(Long id); 

However now I am getting an error saying:

[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;      } 

Database tables

like image 541
Mike3355 Avatar asked Jun 11 '15 18:06

Mike3355


People also ask

Which of the following annotation can be used to bind names to positional parameters in query?

Hence it is suggested to use @Param annotation in the method parameter to bind the query parameter names. And in the query, you need to use :paramName to indicate that the same paramName is to bind with the method parameter.

What is@ Param in jpa?

We can also pass method parameters to the query using named parameters. We define these using the @Param annotation inside our repository method declaration. Each parameter annotated with @Param must have a value string matching the corresponding JPQL or SQL query parameter name.


1 Answers

Try this parameter description:

List<ShopOrder> getShopOrder(@Param("id") long id); 
like image 126
RoutesMaps.com Avatar answered Oct 04 '22 06:10

RoutesMaps.com