hyf 发表于 2018-8-20 15:13:16

多层实体对象查询datagrid分享,感谢同事看代码走心。

先看下实体对象模型:
class A{
@Id
private String id;
@Column(name="name")
private String name;
......
}
class B{
@Id
private String id;
@Column(name="name")
private String name;
@ManyToOne
@JoinColumn(name="A_ID")
private A aa;
......
}
class C{
@Id
private String id;
@Column(name="name")
private String name;
@ManyToOne
@JoinColumn(name="B_ID")
private B bb;
......
}
显而易见,A\B\C就是一对多关系,暂时用不上OneToMany
分页查询展示列
bb.aa.id,bb.aa.name,bb.id,bb.name,id,name
分页查询条件和这个一致

查询方法
@RequestMapping(params = "datagrid")
public void datagrid(C cc,HttpServletRequest request,HttpServletResponse response, DataGrid dataGrid) {
   CriteriaQuery cq = new CriteriaQuery(C.class,dataGrid);
   HqlGenerateUtil.installHql(cq,cc,request.getParameterMap());
   cq.add();
   this.iTInterversService.getDataGridReturn(cq,true);
    TagUtil.datagrid(response,dataGrid);
}

在不传参数情况下一路顺畅(打开sql监控,可以查看分页查询sql),传A对象参数时,就会报错属性识别不了。
各种尝试,用hql都没问题,因为要封装分页,所以继续坚持分析原因。花了两天,找大神检查代码,发现框架封装hql有点小问题,不管是不是有问题,至少现在的问题解决了。

解决方案
java框架中HqlGenerateUtil.java不支持嵌套2层以上的子对象查询
改造installHqlJoinAlias方法中实现类对象递归传参需要处理下就解决了,一行代码解决,666


页: [1]
查看完整版本: 多层实体对象查询datagrid分享,感谢同事看代码走心。