The name of parameter binding cannot be null or empty! For named parameters, you need to use @ param to query method parameters on the Java version
•
Java
This is over, but my problem is different This is a problematic jpql query:
@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 try to do:
@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"));
But this gives me a warning:
[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 query is being executed by:
/** * 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); } }
Any suggestions?
———— UPDATE —————-
This seems to solve the problem:
@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);
But now I have a mistake to say:
[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; }
Solution
Try this parameter description:
List<ShopOrder> getShopOrder(@Param("id") long id);
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码