多层实体对象查询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]