Gangmax Blog

My Tip 22

使用Hibernate的过程中发现问题,不知道如何实现:A表作为主表,A中存在指向另一表B外键(即A为主表,B为子表),此时进行对A为主的查询,要求查询的结果需要以B的某一字段x作为排序的字段。此时,程序中使用Criteria方式进行查询,此时使用criteria.addOrder()方法直接把”B.x”作为排序字段,会发生异常,异常的描述信息是:“B.x不是A类的一个属性(property)”。经过反复试验,发现有以下的方法达到解决问题的目的:

需要在Criteria中先加入这样的代码:

1
criteria.getDetachedCriteria().createAlias("this.B", "B"); 

注意:这行代码的作用(或者说直接后果)是在查询A的SQL语句中,加入“使用inner join连接B表”的内容。

而criteria.addOrder()还是按原样加入”B.x”作为排序的属性,这样在运行的时候就不会出问题了,哈哈!

Comments