java - 值(value)返回方法JPQL的最佳实践是什么

标签 java jpa persistence 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 列表,其中包含您需要的两个字段。

关于java - 值(value)返回方法JPQL的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778443/

相关文章:

java - 无法找到 LoginModule 类 : com. sun.security.auth.module.Krb5LoginModule

java - 使用自定义查询进行 JPA 优化

php - 如何在 PHP + MySQL 中正确实现自定义 session 持久器?

java - 如何在 google-service.json 中添加 Signed Apk Keystone

java - SnakeYaml 获取堆叠键

java - 使用注释在 hibernate 中动态地将 POJO 映射到表

python - Django:我的表单没有持久保存在数据库中

java - 使用 JPA 和自动生成的主键标识将实体持久保存到数据库

java - .replace() 函数无法正确交换字符

java - 我正在使用 bean 验证。在我的实体的 PerPersist 方法中,如果验证失败,如何停止持久化?