簡體   English   中英

價值返回方法JPQL的最佳做法

[英]What best practices for value return method JPQL

我需要尋求支持,在這段代碼中我最初只需要兩個字段,但是如果只有兩個字段或整個對象,我不確定如何最好地將查詢值返回到下面的方法。

提前致謝

  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;

    }

我曾經創建過這樣的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代替結果集,如下所示:

“從...中選擇新的com.stackoverflow.repository.StockxDepositDTO(c.bkLocationC,d.bkStockTypeC)。

結果,您將收到一個StockxDepositDTO列表,其中包含您需要的兩個字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM