【问题标题】:Hibernate java.lang.ArrayIndexOutOfBoundsException: 4休眠java.lang.ArrayIndexOutOfBoundsException:4
【发布时间】:2018-09-06 11:40:03
【问题描述】:

我正在尝试创建一个将返回一些数据的休眠查询,在我的持久性类中,我有一个连接映射为 @OneToMany 的对象:

//bi-directional many-to-one association to TransactionDetail
@OneToMany(mappedBy="pallet")
private List<TransactionDetail> transactionDetails;

当我尝试获取整个列表(我需要其中的所有字段)时,我得到了异常,我试图这样做:

ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("idPallet"), "idPallet");
projectionList.add(Projections.property("type"), "type");
projectionList.add(Projections.property("sourceCode"), "sourceCode");
projectionList.add(Projections.property("registeredDate"), "registeredDate");
//error caused by next line    
projectionList.add(Projections.property("transactionDetails"), "transactionDetails"); 

Criteria criteria = getSession().createCriteria(Pallet.class, "pallet");
criteria.createAlias("pallet.transactionDetails", "transactionDetails",JoinType.INNER_JOIN);


criteria.setProjection(projectionList);
criteria.setResultTransformer(Transformers.aliasToBean(Pallet.class));

知道我做错了什么吗?

【问题讨论】:

  • 能否请您分享错误的堆栈跟踪?

标签: java hibernate hibernate-criteria


【解决方案1】:
  1. 您必须选择一些 transactionDetails 列而不仅仅是表

如果您的 TransactionDetails 实体具有 date 列的示例

projectionList.add(Projections.property("transactionDetails.date"), "transactionDetailsDate"); 
  1. 您将无法转换为 Pallet.class(使用域对象作为 DTO 不是一个好主意)

您必须创建一个像 PalletDTO 这样的 DTO,它将包含您的投影的所有字段:

  • idPallet
  • 类型
  • 源码
  • 注册日期
  • 交易详情日期

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-10-26
    • 2012-01-23
    • 2012-02-16
    • 2014-09-04
    相关资源
    最近更新 更多