1

I want to remove warning by mentioning generic type in List result and Iterator orderRecord

OrderStorage class

public class OrderStorage {

    private static final String GET_TOTAL_ORDERS_QUERY = "SELECT c.name as customerName ,o.orderDate,p.name as productName  "
            + "FROM Customer c LEFT JOIN Order o WITH o.customer = c LEFT JOIN Product p WITH o.product = p";

    public static List<TotalOrder> getOrder() {

        List<TotalOrder> resultList = new ArrayList<TotalOrder>();
        Session session = SessionCreator.getSession();
        session.beginTransaction();
        List result = session.createQuery(GET_TOTAL_ORDERS_QUERY).getResultList();
        Iterator orderRecord = result.iterator();
        while (orderRecord.hasNext()) { 
            TotalOrder customerOrder = new TotalOrder();
            Object values[] = (Object[]) orderRecord.next();
            customerOrder.setCustomerName(String.valueOf(values[0]));
            customerOrder.setOrderDate(String.valueOf(values[1]));
            customerOrder.setProductName(String.valueOf(values[2]));
            resultList.add(customerOrder);
        }
        session.close();
        return resultList;
    }
}

TotalOrder class

private String customerName;

private String orderDate;

private String productName;

Getters and Setters method

Warnings is :

List is a raw type. References to generic type List should be parameterized

Iterator is a raw type. References to generic type Iterator should be parameterized

Ramprasath Selvam
  • 3,868
  • 3
  • 25
  • 41

2 Answers2

0

You need to create a typed query by using another overload of createQuery method.

Doc for createQuery method says:

<T> Query<T> createQuery(java.lang.String queryString,
                         java.lang.Class<T> resultType)

Create a typed Query instance for the given HQL/JPQL query string.

Lesiak
  • 22,088
  • 2
  • 41
  • 65
0

You can either use Object[] or, probably better, use a ResultTransformer, that way you don't even need to use an iterator.

return session.createQuery(GET_TOTAL_ORDERS_QUERY)
         .setResultTransformer( Transformers.aliasToBean( TotalOrder.class ) )
         .getResultList();

This will let hibernate map the result directly to a TotalOrder, no need to map yourself. It might be needed to add an as orderDate to your query for the order field.

For more ways to map results check this.

M. Deinum
  • 115,695
  • 22
  • 220
  • 224