Какие лучшие практики для метода возврата стоимости JPQL - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно обратиться за поддержкой, в этом коде мне изначально нужны только два поля, но я не уверен, как лучше вернуть значения запроса в метод ниже, если только два поля или весь объект.

Заранее спасибо

  public LocalDE localizaPorItemstockdeposit(   final BigInteger ItemId, 
                                                  final BigInteger stockId, 
                                                  final BigInteger depositId){

        StringBuilder sql = new StringBuilder();

        sql.append(" SELECT ")
           .append("     c.bkLocationC, ")
           .append("     d.bkStockTypeC ") 
           .append("   FROM LocalDE c ") 
           .append("     JOIN a.partsXWarehouseDE b ")
           .append("     JOIN a.depositDE c  ")
           .append("     JOIN a.TypedepositDE d ")
           .append("   WHERE ")
           .append("      a.ItemId = :ItemId AND")
           .append("      a.stockId = :stockId AND") 
           .append("      a.bkdepositId  = :depositId ");         

        TypedQuery<LocalDE> query = this.entityManager().createQuery(sql.toString(), LocalDE.class);

        query.setParameter("ItemId", ItemId);
        query.setParameter("stockId", stockId);
        query.setParameter("depositId", depositId);

        @SuppressWarnings("unchecked")
        List lstitemxStockxDeposit = query.getResultList();
        java.util.Iterator it = lstitemxStockxDeposit.iterator(); 

        LocalDE itemxStockxDeposit = new LocalDE();
        depositDE deposit = new depositDE();
        TypedepositDE  typeDeposit = new TypedepositDE();

        while(it.hasNext()) {
            Object[] resultitemxStockxDeposit =(Object[]) it.next();

            deposit.setDepositDesc(String.valueOf(resultitemxStockxDeposit[0]));
            typeDeposit.setTypeDepositDEsc(String.valueOf(resultitemxStockxDeposit[1]));

            itemxStockxDeposit.setDepositDE(deposit);
            itemxStockxDeposit.setTypeDepositDE(typeDeposit);
        }

        return itemxStockxDeposit;

    }

1 Ответ

0 голосов
/ 27 июня 2019

Я использовал для создания DTO, как это:

public class StockxDepositDTO {

        private String deposit;
        private String typeDeposit;

        //with a constructor
        public StockxDepositDTO(String deposit, String typeDeposit){
             this.deposit = deposit;
             this.typeDeposit = typeDeposit;
    }
}

Поэтому, когда вы получите данные, вы можете использовать этот DTO вместо набора результатов, как показано ниже:

"SELECT new com.stackoverflow.repository.StockxDepositDTO (c.bkLocationC, d.bkStockTypeC) FROM .... "

В результате вы получите список StockxDepositDTO с двумя необходимыми полями.

...