关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 9645|回复: 0

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

[复制链接]
发表于 2018-8-20 15:13:16 | 显示全部楼层 |阅读模式
先看下实体对象模型:
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


clipboard.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表