| 
 | 
 
先看下实体对象模型: 
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 
 
 
 |   
- 
 
 
 
 
 
 
 
 |