价值回报方法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的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章