价值回报方法JPQL的最佳实践

Posted

技术标签:

【中文标题】价值回报方法JPQL的最佳实践【英文标题】:What best practices for value return method JPQL 【发布时间】:2019-11-08 17:34:27 【问题描述】:

我需要寻求支持,在这段代码中,我最初只需要两个字段, 但是如果只有两个字段或整个对象,我不确定如何最好地将查询值返回给下面的方法。

提前致谢

  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】:

我曾经这样创建 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.***.repository.StockxDepositDTO(c.bkLocationC, d.bkStockTypeC) FROM ....”

结果您将收到一个 StockxDepositDTO 列表,其中包含您需要的两个字段。

【讨论】:

施耐德感谢您的反馈。我会应用提示。

以上是关于价值回报方法JPQL的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Impala优化十大指导原则和最佳实践

Go单体服务开发最佳实践

大众评审 | 最佳敏捷实践奖

高德最佳实践:Serverless 规模化落地有哪些价值?

DataOps 不是工具,而是帮助企业实现数据价值的最佳实践

从一个实例详解敏捷测试的最佳实践